Skip to content

QR Code & Barcode Generator and Reader

Try for free

Generate QR codes and barcodes in bulk (QR, Data Matrix, Aztec, PDF417, EAN-13, UPC-A, Code 128, GS1-128, ITF-14 and more) as PNG, SVG, JPEG or WebP with colors, logo and caption, every file test-scanned; or decode all QR codes and barcodes in images and PDF files. No login or API key needed.

🔳 QR Code & Barcode Generator and Reader

Turn a list of links, product numbers or order IDs into ready-to-print QR codes and barcodes, or read every QR code and barcode in your photos, scans and PDF files. 25 code types, PNG, SVG, JPEG or WebP, your colors, a logo and a caption, and every generated file is test-scanned before it is saved. No login, no API key, no watermark. $0.425 per 1,000 codes.

✨ Why use QR Code & Barcode Generator and Reader?

  • 🧩 25 code types — QR, Micro QR, rMQR, Data Matrix, GS1 DataMatrix, Aztec, PDF417, MaxiCode, EAN-13, EAN-8, UPC-A, UPC-E, ISBN, Code 128, GS1-128, Code 39, Code 93, ITF, ITF-14, Codabar, GS1 DataBar (3 kinds) and PZN.
  • ✅ Every file is scan-checked — each generated image is decoded again before it is saved (scanVerified), so a logo that is too big or a wrong check digit never ends up on your labels.
  • 🖨️ Print-sharp output — every module is a whole number of pixels (no blurry resizing), an exact target width when you need one, and SVG for vector print.
  • 🎨 Branded QR codes — code and background colors, transparent backgrounds, a logo in the middle and a caption under the code.
  • 📄 Reads images and PDFs — every code on every image or PDF page: QR, Data Matrix, Aztec, PDF417, EAN/UPC, Code 128 and more, rotated, inverted or several per image.
  • 💸 Pay only for results — one event per saved file or per image (or PDF page) where a code was found. Invalid values, failed downloads and images without a code are free.

🎯 Use cases

  • 🛒 Retail and e-commerce — EAN-13 / UPC-A barcodes for product labels and packaging, GS1-128 and ITF-14 for cartons.
  • 📦 Logistics and warehouses — Code 128 and Data Matrix labels for orders, shipments, bins and assets; read the codes back from photos of delivered parcels.
  • 📣 Marketing — branded QR codes with your logo and colors for flyers, menus, posters and business cards; Wi-Fi and contact QR codes for events.
  • 🎟️ Tickets and events — Aztec and PDF417 codes in bulk, or decode the codes on scanned tickets and boarding passes.
  • 🤖 Automations — create or read codes from an API call in Make, n8n, Zapier or your own backend, with includeDataUri when the next step cannot download links.
  • 🧾 Data entry — pull product numbers and links out of hundreds of photos or PDF invoices at once.

🚀 How to use

  1. Pick the mode: Generate codes or Read codes from images or PDFs.
  2. Generate: put your values into Codes to generate (one object per code, each with its own type, name and caption if you like) or paste them one per line into Values, one per line. Choose the default code type and file format, and adjust colors, size, caption or logo under Look.
  3. Read: paste direct links to images or PDF files into Image or PDF links to read.
  4. Or take the values (or image links) from one of your datasets under Dataset input, for example the results of another run.
  5. Click Start. Download the results as JSON, CSV or Excel, open each file from its fileUrl, or download every file at once from the ZIP link in the run summary.

📥 Input

FieldWhat it does
modegenerate or read. If only one kind of input is filled in, the run picks the matching mode.
itemsCodes to generate: {"data", "name", "type", "caption"} plus optional per-code format, colors, errorCorrection, scale, size, barHeight, showText, logoUrl.
textsPlain values, one per line; they use the default type.
typeDefault code type (qr, ean13, upca, code128, gs1-128, datamatrix, aztec, pdf417, itf14 ...).
formatpng, svg, jpg or webp.
foregroundColor, backgroundColorHex colors or names; the background can be transparent.
scale, size, barHeight, quietZonePixels per module, exact image width, bar height and margin.
errorCorrection, logoUrl, logoSizePercent, caption, showTextQR error correction, logo, caption and the digits under barcodes.
imageUrlsRead mode: links to images (PNG, JPEG, WebP, GIF, BMP, TIFF) or PDFs.
readFormats, pdfDpiRead mode: only look for some code types; PDF render resolution.
datasetId, datasetField, datasetNameFieldTake values or image links from one of your datasets.

A QR code can also carry ready-made content instead of data: wifi (ssid, password, encryption), contact (vCard: name, phone, email, company, title, url, address), email (to, subject, body), sms (phone, message), phone or geo (lat, lng).

{
  "mode": "generate",
  "items": [
    { "data": "https://scrape.ly", "name": "website-qr", "caption": "Scan me" },
    { "data": "4006381333931", "type": "ean13", "name": "product-ean13" },
    { "data": "ORDER-2026-000123", "type": "code128", "name": "order-label" },
    { "wifi": { "ssid": "Cafe Guest", "password": "coffee2026" }, "name": "guest-wifi" }
  ],
  "format": "png",
  "foregroundColor": "#1A237E",
  "backgroundColor": "#FFFFFF"
}
{
  "mode": "read",
  "imageUrls": [
    "https://upload.wikimedia.org/wikipedia/commons/0/06/DataMatrix_code_on_a_bottle_of_milk.jpg",
    "https://upload.wikimedia.org/wikipedia/commons/9/9f/Codigo_de_barras.pdf"
  ]
}

📤 Output

One row per generated file, or per image (or PDF page) in which codes were found. Rows that could not be done carry status: "error" and a plain-language error; images without a code come back as status: "no_code_found".

FieldGenerateRead
statusok or errorok, no_code_found or error
type, datacode type and the encoded valuetype and value of the first code found
dataKindurl, wifi, contact, email, phone, sms, geo, product-number, gs1, text ...same, for the first code
fileUrl, fileName, formatdownload link (valid 7 days), file name, format—
width, height, sizeBytesimage size in pixels and bytessize of the image or rendered PDF page
scanVerifiedtrue when the saved picture scans back to the same value—
errorCorrection, hasLogoQR error correction level, logo used—
imageUrl, page, count—source link, PDF page number, number of codes
codes—every code: type, data, dataKind, parsed (Wi-Fi, contact, e-mail ... fields), contentType, errorCorrection, orientation, rect, polygon, symbologyIdentifier, version
note, error, errorCodeadjustments made, or why a row failedsame

Generated (from a test run):

{
  "mode": "generate",
  "status": "ok",
  "index": 2,
  "name": "product-ean13",
  "type": "ean13",
  "data": "4006381333931",
  "dataKind": "product-number",
  "fileUrl": "https://api.scrape.ly/v2/key-value-stores/7772a7e3-4ad4-44fd-83f3-11dd5ee681ce/records/product-ean13.png?signature=...&attachment=1",
  "fileName": "product-ean13.png",
  "format": "png",
  "width": 348,
  "height": 198,
  "sizeBytes": 3996,
  "errorCorrection": null,
  "hasLogo": false,
  "scanVerified": true,
  "note": null,
  "error": null,
  "errorCode": null
}

Read (from a test run, a photo of a milk bottle):

{
  "mode": "read",
  "status": "ok",
  "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/0/06/DataMatrix_code_on_a_bottle_of_milk.jpg",
  "page": null,
  "count": 1,
  "type": "Data Matrix",
  "data": "(01)04607078117294(21)5fGHNL(93)H/xN",
  "dataKind": "gs1",
  "codes": [
    {
      "type": "Data Matrix",
      "data": "(01)04607078117294(21)5fGHNL(93)H/xN",
      "dataKind": "gs1",
      "contentType": "GS1",
      "orientation": -8,
      "rect": { "x": 251, "y": 184, "width": 171, "height": 166 },
      "symbologyIdentifier": "]d2",
      "version": "20x20"
    }
  ],
  "width": 706,
  "height": 710,
  "error": null
}

The run summary (OUTPUT in the key-value store) holds the counts, errors by type and allFilesZipUrl, a link that downloads every generated file as one ZIP.

💰 Pricing

$0.000425 per code, which is $0.425 per 1,000 codes. One event is charged per saved file in generate mode, and per image or PDF page with at least one decoded code in read mode (an image with five codes is one event). Platform usage is included: there is no start fee and no compute or storage charge on top.

Examples: 1,000 product barcodes ≈ $0.43; reading 200 label photos that all carry a code ≈ $0.09. Invalid values, failed downloads and images without a code cost nothing.

❓ FAQ

Is it legal to generate and read barcodes? Yes. The tool only encodes the values you give it and decodes images you link. For retail barcodes (EAN/UPC) use numbers you are entitled to, such as GTINs your company licensed.

Do I need a login, an API key or a proxy? No. Downloads of images, PDFs and logos go through the Scrape.ly datacenter proxy by default; switch to the Residential group if a site refuses them.

How many codes can one run make? As many as you put in; there is no cap. In our tests 1,000 codes took about 20 seconds and 10,000 codes about 14 minutes, with memory flat at about 110 MB. Read mode handles a few images per second, depending on their size and the sites they come from.

What happens to a wrong EAN or UPC? The check digit is verified. A wrong one gives a free error row such as "Invalid EAN-13 check digit in 4006381333932: the last digit should be 1." Leave the check digit out and it is added for you.

Why is a field empty? errorCorrection exists only for QR codes; hasLogo is true only on QR codes with a logo; read-mode fields stay empty on generate rows and the other way round. note tells you when a setting was adjusted (for example error correction raised to H for a logo).

Can I schedule it or use the API? Yes. Run it from the Scrape.ly API, a schedule, an MCP client or an automation tool, and read the dataset or the ZIP link from the run summary.

⚠️ Limits

  • Read mode takes PNG, JPEG, WebP, GIF (first frame), BMP and TIFF images and PDF files up to 100 MB each. SVG files are not read; use a PNG version.
  • Very large photos are scaled down to about 36 megapixels before scanning; PDF pages are rendered at 200 DPI (pdfDpi up to 600 for tiny codes).
  • Download links of generated files are valid for 7 days; the files stay in your storage as long as your retention allows.
  • One generated file may have at most 10 megapixels (about 3,160 x 3,160 px), the most the default memory draws safely; larger sizes give a free error row.
  • Logos are placed on QR codes only (error correction H, at most 35% of the width).
  • Damaged, very blurry or tiny codes may not decode; such images come back as no_code_found and are free.
//From the blog\\

Latest articles

All articles

The internet is full of data.
Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes.

No credit card. No setup calls.