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:
| Capability | Supported | Notes |
|---|---|---|
| Scan a code with the camera | Yes — iOS and Android apps only | Not available in the web app |
| Store the scanned value | Yes | Raw string, exactly as read |
| Type or paste a value manually | Yes, on every platform | Useful for importing supplier data |
| Generate a code image | No | Requires an external image API |
| Barcode field in a form | No | Forms do not support the field type at all |
| Scanner inside an interface | No | Interfaces have no native scanner |
| Parse GS1 data | No | Application 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:
- Open the table in the Airtable app and tap a non-primary field.
- Tap Customize field.
- Under Field type, choose Barcode.
- 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.
- Add an attachment field called
QR Code. - Create an automation: trigger When record matches conditions —
SKU is not emptyandQR Code is empty. - Action: Update record, setting
QR Codeto the value of theQR URLformula 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 this | Use when | Trade-off |
|---|---|---|
| SKU / asset tag | Humans read the label; suppliers print the same code | Breaks if a SKU is ever renamed or duplicated |
Airtable record ID (rec…) | The code is only ever scanned into your own base | Meaningless to a human reading the label |
| Prefilled form URL | You want a phone camera — not Airtable — to open a form | Long string, and forms cannot receive barcode fields |
| GS1 / manufacturer code | Retail goods with existing packaging | Airtable 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:
- Trigger: When record matches conditions —
Scanned Code is not emptyandProduct is empty. - Find records: in Products, where
SKU(orRecord ID) equals the trigger record'sScanned Code. - Update record: set the
Productlink field to the first result. - Optional condition: if the find returned nothing, set a
Statusof "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=4parameter 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
- Add the barcode field and a
Barcode is emptyview to see how many items still need codes. - Add the
QR URLformula and the attachment automation, then generate one code and print one label. - Scan that label with the phone your team actually uses before generating the other 900.
- Build the Scans table and the matching automation — log movements, never overwrite totals.
- 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.