SawStream for Airtable
SawStream lets you display live data from any Airtable base on any website, no backend code required. Connect once, build a query that picks a base, table, and fields, choose a layout (table, cards, calendar, JSON, CSV, etc.), and paste a small embed snippet. Every page load fetches fresh data from Airtable.
Linked records, multi-selects, attachments, and collaborators are flattened to readable strings before they reach the page, so you don't need to wrangle Airtable's nested response shapes.
Signing in
The admin login page is at /login. Enter your email and password and click Log in.
Contact [email protected] if you have any issues signing in.
Airtable setup
SawStream connects to Airtable using OAuth 2.0. You create your own OAuth integration in Airtable's developer hub, paste the Client ID into SawStream, and authorize. PKCE is supported, so the Client Secret is optional.
- Open the Airtable Builder Hub at
airtable.com/create/oauthand sign in. - Click Register new OAuth integration.
- Give it a name (anything you like, e.g. "SawStream"), pick a logo if you want, and fill in the developer contact email.
- In the OAuth redirect URI field, paste the callback URL shown on your SawStream Airtable settings page. It looks like
https://yourdomain.com/auth/airtable/callback— use the exact URL from SawStream. - Under Scopes, add at minimum
data.records:readandschema.bases:read. Add more if you plan to write back (SawStream itself only reads). - Click Register integration. Airtable shows the Client ID and, if you didn't choose PKCE, a Client Secret. Copy these.
- Go to Airtable in the sidebar of your SawStream admin.
- Paste the Client ID from Airtable into the Client ID field.
- If you chose to use a Client Secret, paste it. PKCE-only integrations leave this blank.
- The default Scope is
data.records:read schema.bases:read— leave as-is unless you registered different scopes. - Click Save Settings.
- Click Connect to Airtable. You'll be redirected to Airtable to authorize.
- Choose which bases SawStream should access (you can pick all, or just a subset), and click Grant access.
After authorizing, you're sent back to the Airtable settings page. The status shows Connected with your Airtable email. You can now create queries.
Queries
A query defines what Airtable data to fetch and how to display it. Each query gets its own embed code (or URL for JSON/CSV).
- Click + New Query and pick Airtable as the platform.
- Give the query a name. This is just for your reference.
- Pick a Base from the dropdown (fetched live from Airtable).
- Pick a Table from the chosen base.
- Add the Fields you want to display by clicking them in the field list. The API field name and display label are both filled in automatically (Airtable uses the field name as the API name).
- Choose a Layout. See the Layouts section.
- Set Per Page for pagination, or leave blank to show all records.
- Use the Filter field for either a record-ID lookup (for detail pages — see below) or any native Airtable formula. Examples below.
- If you want a search bar on the embed, turn on Enable Search Bar and pick which fields to search.
- To make each record clickable, fill in Detail Link Template. Use
{!FieldName}for placeholders, e.g.https://example.com/profile?id={!id}. - Click Save Query.
The Filter field accepts native Airtable filterByFormula expressions. A few common patterns:
{Status}='Active'— show records where the Status field is "Active".AND({Status}='Active', {VIP})— multiple conditions combined.FIND('newsletter', LOWER({Tags}))— fuzzy match in a multi-select field.IS_AFTER({CreatedAt}, DATEADD(TODAY(), -30, 'days'))— recent records only.
If a {!param} placeholder doesn't substitute (because the embedding page didn't pass that URL parameter), SawStream treats the filter as empty rather than returning zero records — so the same query can serve a list page and a detail page.
The Data Freshness slider controls caching. Live Data refetches on every page load. The 15-minute / 1-hour / 6-hour / 12-hour options cache results for that long, making page loads faster and reducing Airtable API quota usage. Setable per query.
From the Queries page: Edit opens the editor (changes apply live), Copy Code copies the snippet, Delete removes the query (type DELETE to confirm).
Detail pages — load one record by ID
For pages like example.com/contact?id=recAKo2vpC4ZjKJP3 that show one Airtable record, set the query filter to one of these — they all route to Airtable's faster Get-Single-Record endpoint instead of scanning the table:
Id = '{!id}'— works just like the Salesforce conventionRECORD_ID() = '{!id}'— native Airtable formula?id={!id}— URL-style
Then on the embedding page, the ?id=… URL parameter is read by SawStream and the record with that ID is returned. If the parameter isn't present (e.g. on the listing page that links into the detail page), the filter is ignored and all records show — so the same query serves both pages.
If the record ID doesn't exist, the embed renders cleanly with no records (no error).
Layouts
Each query has a layout that controls how the data appears on your site.
Standard data table with column headers, sortable by clicking, and a sticky first column on narrow screens.
Each record becomes a card — first field is the title, remaining fields show as label/value pairs.
Tighter 3-column layout. Header band with the record name plus compact label/value rows.
Filter sidebar auto-built from your fields (checkboxes for multi-select / single-select fields, range sliders for number fields) with matching records on the right.
FullCalendar month/week/list views. Pick a date field for the start, a title field, and optionally an end date. Color events by a field.
You write a template; SawStream renders it per record. Use {!FieldName} placeholders.
Stable JSON URL — fetch it from any frontend, mobile app, or workflow.
A URL that triggers a CSV file download. Wire it to a Download button on your site.
recXXX, recYYY; attachments show the filename; collaborators show their name.Embedding on your site
Once you have a query, go to its detail page to get the embed code:
<div class="sawstream-section"></div>
<script src="https://sawstream.com/e/tenant/live.js?q=abcdedquerycodexyz" async></script>
Paste both lines into your website where you want the data to appear. The script tag can go anywhere on the page, including the <head>.
By default the widget renders inside the nearest .sawstream-section div above the script. For more control, add a data-target:
<script src="https://sawstream.com/e/tenant/live.js?q=abcdedquerycodexyz"
data-target="#my-custom-div" async></script>
For JSON and CSV queries you'll see a plain URL instead of a snippet. The JSON URL returns data as an array of objects; the CSV URL triggers a file download.
Settings
Go to Settings in the sidebar to manage allowed origins for your embeds.
A list of domains allowed to load your embed and call the query API. Enter one domain per line, e.g. https://mysite.com. Only requests from those origins are served. Settable globally or per-query.
Your account
Click the lock icon in the sidebar footer. New passwords must be at least 10 characters, include a number, and include a symbol.
Click Log out in the sidebar footer.
SawStream for Airtable is $33/month (billed annually as $396/year) for your whole organization — no per-user fees. Non-profits and educational institutions can get special pricing; email [email protected].