# How do I import product URLs in bulk?

> Upload a CSV with a sku or ean, a retailer and a url per row. priceq checks the EAN on each page and links the ones that match.
>
> en | updated 2026-09-28 | https://priceq.io/help/en/checking-matches/import-product-urls-in-bulk

If you already know which page belongs to which product, you can link them all at once with a CSV file. Open **Sources**, click **Import CSV**, choose your file and click **Validate**. priceq checks each page and links the ones whose EAN matches your product.

## The file

Use a `.csv` file with a header row. The columns are:

- `sku` or `ean`: which of your products the row is about. If you fill both, the sku is tried first.
- `retailer`: the shop, written the way it appears in the **retailer** filter on the **Mappings** tab.
- `url`: the product page at that shop.

Column names are not case sensitive. An example row:

```
sku,retailer,url
C50903-32D7X,azerty,https://azerty.nl/product/...
```

The shop must already be one you follow, and the product must already be in your catalogue. See [Adding a retailer](/help/en/products-and-sources/adding-a-retailer).

## First check: the rows

A file without a header row, or without a `retailer` or `url` column, is refused as a whole with **Something went wrong**.

Otherwise priceq reads every row. Rows that repeat the same product, shop and page are imported once. Rows with a problem are skipped and counted under **errors**. When no row at all could be accepted, the window lists every error row with its row number and a short code:

- `missing_url`, `missing_retailer` or `missing_sku_identifier`: a cell is empty.
- `unknown_retailer`: you do not follow a shop by that name.
- `unknown_sku`: no product in your catalogue has that sku or EAN.

Fix those rows in the file and import it again.

## Second check: the pages

priceq then opens every accepted page and compares its EAN with your product's EAN. A bar shows the progress, with counts for **matched**, **to review** and **errors**. You can close the window while it runs. When it finishes, you see **Import complete.**

- Same EAN: the page is linked right away with the state **matched**.
- A different EAN, or a page that could not be opened: the row goes to **To review** in **Sources**. Confirm it there with **Confirm URL**, ticking **skip EAN check** when you are sure. See [The review queue](/help/en/checking-matches/the-review-queue).

To change a single link afterwards, use [Fix a wrong match](/help/en/checking-matches/fix-a-wrong-match).
