Watch our latest video available on Youtube.
Tutorials/Tutorial

How to Build a QR Code and Barcode System in Airtable

Airtable can scan barcodes and QR codes out of the box, but it cannot create them — which is exactly where most builds stall. This guide covers the full loop: adding the barcode field, generating codes for every record, printing the labels, and turning a scan into a stock movement or an asset check-out without anyone typing a SKU.

Intermediate11 min readAug 12, 2026

Airtable can scan a barcode or a QR code the moment you add the right field type — no extension, no integration, no plugin. What it cannot do is create one. That single gap is why most barcode projects in Airtable stall halfway: the scanning half is a five-minute setup, and the generating, printing, and matching half is where the actual system lives.

This guide covers the whole loop. You will add the native barcode field, generate a QR code image for every record with a formula and an automation, print the labels, and wire a scan to an action — a stock movement, an asset check-out, an attendance record — so nobody types a SKU again.

It is written for operations people building an internal system: warehouse stock, tool and equipment tracking, IT assets, event check-in. No code is required for the main build, though there is one optional script for backfilling codes in bulk.

Key Takeaways

  • Airtable's barcode field is scan-only, and scanning works exclusively in the iOS and Android apps — never the web app, never forms.
  • Generate codes outside Airtable with an image URL from a formula field, then push that image into an attachment field with an automation.
  • Decide early whether your code encodes a SKU (human-meaningful, printed by suppliers) or an Airtable record ID (never collides, never changes).
  • The scan itself is not the workflow. A scan should create a record, not just fill a field.
  • Print with the Page Designer extension — which means a paid plan, since Airtable's free tier has no extensions at all.

What Airtable's Barcode Field Actually Does

Before designing anything, know precisely where the walls are. From Airtable's barcode field documentation:

CapabilitySupportedNotes
Scan a code with the cameraYes — iOS and Android apps onlyNot available in the web app
Store the scanned valueYesRaw string, exactly as read
Type or paste a value manuallyYes, on every platformUseful for importing supplier data
Generate a code imageNoRequires an external image API
Barcode field in a formNoForms do not support the field type at all
Scanner inside an interfaceNoInterfaces have no native scanner
Parse GS1 dataNoApplication identifiers are stored raw, not split into parts

The scanner recognises 17-plus symbologies — QR, UPC-A, UPC-E, EAN-8, EAN-13, Code 39, Code 93, Code 128, Interleaved 2 of 5, ITF-14, PDF417, Aztec and DataMatrix among them. The field is available on all plan levels, including free.

Two of those "no" rows shape every design decision that follows: because forms cannot take a barcode field, and interfaces have no scanner, every scanning step in your system has to happen inside the Airtable mobile app. Plan the workflow around that constraint rather than discovering it after you have built a beautiful interface nobody can scan into.

Step 1: Add the Barcode Field

The field type is created like any other, but the mobile route is worth knowing because that is where your team will live:

  1. Open the table in the Airtable app and tap a non-primary field.
  2. Tap Customize field.
  3. Under Field type, choose Barcode.
  4. Save.

On the web app, add the field the usual way from the field menu — you simply will not see a scan button on it.

Put the barcode field on the table that describes the thing: Products, Assets, Equipment, Attendees. If your items already carry manufacturer barcodes, populate the field by importing the supplier's export or by scanning each item once. Import barcode values as text, never as a number. EAN-13 and UPC-A values start with zeros and end in a check digit, and a numeric import quietly destroys both.

Then add a view filtered to Barcode is empty. That view is your onboarding queue: anything sitting in it has no code yet and cannot be scanned.

Step 2: Generate a Code for Every Record

Items without a manufacturer barcode — your own equipment, internal assets, event badges, shelf locations — need a code you create. Two free URL-based APIs do this well, and both work by returning an image from a plain GET request.

QR codes via QuickChart's QR API: add a formula field called QR URL.

'https://quickchart.io/qr?text=' & ENCODE_URL_COMPONENT({SKU}) &
'&size=300&margin=4&ecLevel=Q'

The parameters that matter: size defaults to 150 pixels (raise it to at least 300 for print), margin defaults to 4 modules of quiet space, and ecLevel sets error correction at L, M, Q or H — the default is M. Use Q or H for anything going into a warehouse or a workshop, where labels get scratched, dusty and rubbed; higher correction lets a damaged code still resolve.

1D barcodes — if you need the classic striped label for an existing scanner gun — come from the same idea with bwip-js's hosted API or QuickChart's barcode endpoint:

'https://quickchart.io/barcode?type=code128&text=' &
ENCODE_URL_COMPONENT({SKU}) & '&width=400&height=100'

Code 128 is the sensible default for internal use: it encodes any alphanumeric string at high density. Reserve EAN-13 and UPC-A for retail products that need a globally registered number.

Turn the URL Into a Stored Image

A formula returns text, and text does not print. To get an actual image onto the record, copy the URL into an attachment field — Airtable's Update record automation action accepts a URL in an attachment field and fetches the file for you.

  1. Add an attachment field called QR Code.
  2. Create an automation: trigger When record matches conditionsSKU is not empty and QR Code is empty.
  3. Action: Update record, setting QR Code to the value of the QR URL formula field.

Every new product now gets a printable code within seconds of being created, and the condition on QR Code is empty stops the automation looping over records that are already done.

For an existing base with hundreds of records, run a one-off script instead of waiting for the automation to catch up. Add a Run script action or use the Scripting extension:

const table = base.getTable('Products');
const query = await table.selectRecordsAsync({ fields: ['SKU', 'QR Code'] });

const updates = query.records
  .filter((r) => r.getCellValueAsString('SKU') && !r.getCellValue('QR Code'))
  .map((r) => {
    const sku = r.getCellValueAsString('SKU');
    return {
      id: r.id,
      fields: {
        'QR Code': [
          {
            url: `https://quickchart.io/qr?text=${encodeURIComponent(
              sku
            )}&size=300&margin=4&ecLevel=Q`,
            filename: `${sku}.png`,
          },
        ],
      },
    };
  });

// updateRecordsAsync accepts a maximum of 50 records per call
for (let i = 0; i < updates.length; i += 50) {
  await table.updateRecordsAsync(updates.slice(i, i + 50));
}

Remember that every generated image consumes attachment storage — 1 GB per base on the free plan, 20 GB on Team and 100 GB on Business. A 300-pixel PNG is a few kilobytes, so ten thousand codes is a rounding error, but it is worth knowing before you generate at 1,200 pixels.

Step 3: Decide What the Code Encodes

This is the decision people skip and regret. The string inside the code determines how reliably a scan finds its record.

Encode thisUse whenTrade-off
SKU / asset tagHumans read the label; suppliers print the same codeBreaks if a SKU is ever renamed or duplicated
Airtable record ID (rec…)The code is only ever scanned into your own baseMeaningless to a human reading the label
Prefilled form URLYou want a phone camera — not Airtable — to open a formLong string, and forms cannot receive barcode fields
GS1 / manufacturer codeRetail goods with existing packagingAirtable stores the raw string, so batch and expiry stay glued on

For internal systems, the record ID wins more often than people expect. It cannot collide, it never changes when someone tidies up a product name, and it matches against a field nobody can accidentally edit. Print the SKU as human-readable text next to the code and you lose nothing.

The prefilled form URL option is the one clever trick worth knowing: a QR code containing a prefilled Airtable form link can be scanned by the phone's own camera app, with no Airtable login at all. That is how you let a contractor or a visitor log something against an asset without giving them a seat.

Step 4: Build the Scan-to-Action Workflow

A scan that only fills a field has saved you one piece of typing. A scan that creates a record is a system. Three patterns cover almost everything.

Pattern A: Scan to Find

The fastest lookup in Airtable, and most teams never find it. In the mobile app, open a base, tap search, then tap the barcode icon and scan. Airtable jumps to the matching record. No build required — it works as soon as barcode values exist in the base. This is the right tool for "what is this part, and how many do we have?"

Pattern B: Scan to Log a Movement

The workhorse pattern for inventory and check-in/check-out. Build a second table — call it Scans or Stock Movements — with a barcode field named Scanned Code, a Quantity number, a Type single select (Received, Dispatched, Damaged, Returned), and a link field to Products.

The mobile flow is: tap +, tap Scanned Code, scan, set quantity, done. Two taps and a camera.

An automation then does the matching:

  1. Trigger: When record matches conditions — Scanned Code is not empty and Product is empty.
  2. Find records: in Products, where SKU (or Record ID) equals the trigger record's Scanned Code.
  3. Update record: set the Product link field to the first result.
  4. Optional condition: if the find returned nothing, set a Status of "Unmatched" so a human reviews it instead of the record vanishing into a gap.

Because the Scans table is append-only, a rollup on the Product record sums quantities into a live stock level — the same pattern covered in depth in the inventory tracking guide. Never let a scan directly overwrite a stock number; log the movement and let the maths derive the total. That way one mis-scan is a single bad row you can delete, not a corrupted count with no history.

Pattern C: Scan, Then Act

Once the scan record is linked, a button field on the record turns it into a one-tap action: "Check out to me", "Send to repair", "Reorder". The button runs an automation that stamps the user, the timestamp and the destination. The Airtable automation guide covers the trigger plumbing if you are new to it.

Step 5: Print the Labels

Generated codes are useless until they are physically on the item. The Page Designer extension is the built-in answer: it renders one printable page per record, so you drag the QR Code attachment onto a canvas, add the product name, SKU and location as text, size it to your label stock, and print or export to PDF.

Practical notes from doing this repeatedly:

  • Print a single test label first and scan it with the actual device your team uses. Paper, contrast and printer DPI matter more than the API parameters.
  • Keep at least a 2 mm quiet zone around the code — the margin=4 parameter in the URL is measured in modules, not millimetres, so verify visually.
  • Do not shrink a QR code below about 20 mm square for phone-camera scanning at arm's length.
  • Extensions require a paid plan. Airtable's free tier has no extensions at all, so Page Designer — and the Scripting extension used for the bulk backfill above — start at Team.
  • For thermal label printers, export the Page Designer PDF at the exact label dimensions rather than scaling a letter-size page down.

Where the Native Setup Falls Down

Three limits will eventually hit a growing system, and each has a known route around it.

Forms cannot take a barcode field. If you need a scan inside a form-like flow, put the scan in a table row in the mobile app instead — Pattern B above — or encode a prefilled form URL in the QR code so the phone camera opens the form directly.

Interfaces have no scanner. You can build a beautiful interface dashboard that displays scan results, but the scan itself still happens in the app's table view. Teams that need scanning inside the interface build a custom extension on the Airtable Blocks SDK — a continuous-scan camera view that looks up records and creates line items in place. That build is walked through in our QR code scanning interface tutorial, and it is the right answer when scanning is a person's whole shift rather than an occasional lookup.

Matching gets fragile at scale. Duplicate SKUs, renamed products and GS1 codes carrying batch and expiry data all break equality matching. Guard against it: enforce uniqueness with a formula that flags duplicate SKUs, prefer record IDs where you control the label, and use a LEFT() or FIND()-based match rather than plain equality when the scanned string legitimately carries extra data.

What It Costs

Almost nothing extra — with one exception. The barcode field is available on every plan and both code APIs render free of charge, but printing via Page Designer is not a free-plan workflow: Airtable lists extensions as unsupported on Free, so labels mean a paid seat or laying them out in another tool.

Your other constraints are the plan limits you already have: 1,000 records per base on Free, 50,000 on Team and 125,000 on Business, with 25,000 and 100,000 monthly automation runs respectively. Team is $20 per seat per month and Business $45 — but those are the annual-commitment rates; on monthly billing they are $24 and $54.

The automation quota is the one to watch. A warehouse scanning 500 movements a day burns roughly 15,000 runs a month if each scan triggers a single automation — around 60% of the Team allowance, before you add reorder alerts or nightly syncs. Real usage tends to run higher, because a run is counted whenever the trigger fires, whether or not the conditions let the actions do anything. Combine steps into one automation rather than chaining three, and keep an eye on the usage panel rather than assuming headroom.

When to Get Help

The build above is a solid day's work for someone comfortable in Airtable. Bringing in an Airtable consultant tends to pay off when:

  • Scanning is a full shift for several people, and you need a custom extension rather than table-view scanning
  • Codes must reconcile against an ERP, a WMS, or supplier GS1 data with batch and expiry parsing
  • The system spans multiple warehouses or vans and needs per-location stock levels
  • The scan has to trigger downstream work — purchase orders, supplier emails, invoices — through Make or another automation platform

We build these systems for product businesses, field teams and equipment-heavy operations. See how we approach inventory tracking automation and field workforce management, or book a call and we will tell you honestly whether Airtable is the right home for it.

Next Steps

  1. Add the barcode field and a Barcode is empty view to see how many items still need codes.
  2. Add the QR URL formula and the attachment automation, then generate one code and print one label.
  3. Scan that label with the phone your team actually uses before generating the other 900.
  4. Build the Scans table and the matching automation — log movements, never overwrite totals.
  5. Add an "Unmatched" status so failed lookups surface instead of disappearing.

Get those five in place and the rest is just volume. The system stops being a spreadsheet somebody updates from memory and becomes a record of what physically happened, one scan at a time.

Frequently Asked Questions

Common questions about this tutorial.

Ready to Transform Your Business Operations?

Join 100+ companies that have automated their way to success. Get started today and see the difference.