> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getqr.com/llms.txt
> Use this file to discover all available pages before exploring further.

# CSV format

> How to prepare the CSV file for bulk create: required header, rows, URL rules and validation errors.

Bulk create reads a simple CSV file: one header row, then one row per QR code with a name and a destination URL. This page lists the rules GetQR checks when you upload it.

## Sample file

```csv bulk-qr-template.csv theme={null}
name,url
Spring Menu,https://getqr.com/spring
Store #14,https://getqr.com/store-14
Table 7,example.com/menu?table=7
"Downtown, Main St",https://example.com/stores/downtown
```

You can also download this starting point in the app: on the **Add links** step, click **Download CSV template**.

## Rules

| Part | Rule |
| - | - |
| File | Must be a `.csv` file. Excel and other formats are not accepted. |
| Header | First row must be exactly `name,url`: lowercase, in that order, no other columns. |
| Rows | Up to 100 non-empty rows. Empty rows are ignored. |
| `name` | Required. Becomes the QR code name. Up to 40 characters; longer names are cut to 40. |
| `url` | Required. A web address starting with `http://` or `https://`. |

### URL rules

* If you leave out the scheme, GetQR adds `https://`. `example.com/menu` becomes `https://example.com/menu`.
* The address must include a real domain with a dot, such as `example.com`.
* No spaces, tabs or line breaks.
* Only web links work. `mailto:`, `ftp://`, `javascript:` and plain email addresses are rejected.

### Duplicate names

Names don't have to be unique. If two rows have the same name (ignoring upper and lower case), GetQR numbers the repeats: `Menu`, `Menu 2`, `Menu 3`.

### Commas and quotes

If a name contains a comma, wrap it in double quotes, as in `"Downtown, Main St"`. Spreadsheet apps do this for you when they save as CSV.

## Create the file in a spreadsheet

<Steps>
  <Step title="Set up two columns">
    In the first row, type `name` in column A and `url` in column B.
  </Step>

  <Step title="Add one row per code">
    Fill in a name and a link on each row, up to 100 rows.
  </Step>

  <Step title="Save as CSV">
    Export or save the sheet as CSV. In Excel, choose **CSV UTF-8**. In Google Sheets, choose **File > Download > Comma-separated values**.
  </Step>
</Steps>

<Tip>
  Saving as UTF-8 keeps accented letters and other non-English characters in your names intact.
</Tip>

## Validation errors

### File errors

These stop the whole file. Fix the file and upload it again.

| Message | What to do |
| - | - |
| Choose a CSV file. Other file types are not supported. | Save the file as `.csv`, not `.xlsx` or `.numbers`. |
| The CSV header must be exactly name,url in that order. | Make the first row exactly `name,url`. Check for capital letters, extra columns or a missing header. |
| Add at least one non-empty data row to the CSV. | The file has a header but no rows. Add at least one name and link. |
| A CSV can contain at most 100 non-empty rows. | Split the list into files of up to 100 rows. |
| This CSV is malformed and could not be read. | Re-export the file from your spreadsheet app. Look for unclosed quotes. |

### Row errors

These mark single rows. You can fix them and re-upload, or continue with the valid rows only.

| Badge or message | Cause |
| - | - |
| **MISSING** / Name is required | The `name` cell is empty. |
| **MISSING** / URL is required | The `url` cell is empty. |
| **INVALID** / Enter a valid HTTP(S) URL | The link breaks one of the [URL rules](#url-rules). |

Row numbers count the header as row 1, so the first data row is row 2, the same as in your spreadsheet.

## Common issues

<AccordionGroup>
  <Accordion title="My header looks right but I still get the header error">
    The header must be lowercase and contain only two columns. `Name,URL` or `name,url,notes` fail. Also check for empty columns to the right of `url` in your spreadsheet.
  </Accordion>

  <Accordion title="A link that works in my browser is marked INVALID">
    The link may contain a space, or use a scheme other than http or https. Encode spaces as `%20` or remove them, and use a full web address.
  </Accordion>

  <Accordion title="Some names were shortened">
    Names longer than 40 characters are cut to 40. Shorten them in the file if you want to choose the wording.
  </Accordion>
</AccordionGroup>

## What's next

<CardGroup cols={2}>
  <Card title="Create QR codes from a CSV" href="/bulk/create-from-csv">
    Upload your file and start the batch.
  </Card>

  <Card title="Bulk create overview" href="/bulk/overview">
    Limits and how bulk create works.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.