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.

Part 1: Create an OAuth integration in Airtable
  1. Open the Airtable Builder Hub at airtable.com/create/oauth and sign in.
  2. Click Register new OAuth integration.
  3. Give it a name (anything you like, e.g. "SawStream"), pick a logo if you want, and fill in the developer contact email.
  4. 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.
  5. Under Scopes, add at minimum data.records:read and schema.bases:read. Add more if you plan to write back (SawStream itself only reads).
  6. Click Register integration. Airtable shows the Client ID and, if you didn't choose PKCE, a Client Secret. Copy these.
Part 2: Connect in SawStream
  1. Go to Airtable in the sidebar of your SawStream admin.
  2. Paste the Client ID from Airtable into the Client ID field.
  3. If you chose to use a Client Secret, paste it. PKCE-only integrations leave this blank.
  4. The default Scope is data.records:read schema.bases:read — leave as-is unless you registered different scopes.
  5. Click Save Settings.
  6. Click Connect to Airtable. You'll be redirected to Airtable to authorize.
  7. Choose which bases SawStream should access (you can pick all, or just a subset), and click Grant access.
SawStream stores both the access token and the refresh token, encrypted. Airtable rotates the refresh token on every refresh — SawStream handles this transparently.

After authorizing, you're sent back to the Airtable settings page. The status shows Connected with your Airtable email. You can now create queries.

To disconnect, click Disconnect on the Airtable settings page. Stored credentials are removed; reconnect any time.

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).

Creating a query
  1. Click + New Query and pick Airtable as the platform.
  2. Give the query a name. This is just for your reference.
  3. Pick a Base from the dropdown (fetched live from Airtable).
  4. Pick a Table from the chosen base.
  5. 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).
  6. Choose a Layout. See the Layouts section.
  7. Set Per Page for pagination, or leave blank to show all records.
  8. Use the Filter field for either a record-ID lookup (for detail pages — see below) or any native Airtable formula. Examples below.
  9. If you want a search bar on the embed, turn on Enable Search Bar and pick which fields to search.
  10. To make each record clickable, fill in Detail Link Template. Use {!FieldName} for placeholders, e.g. https://example.com/profile?id={!id}.
  11. Click Save Query.
Filter syntax

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.

Data freshness

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.

Editing, copying, deleting

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 convention
  • RECORD_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.

Table

Standard data table with column headers, sortable by clicking, and a sticky first column on narrow screens.

Cards

Each record becomes a card — first field is the title, remaining fields show as label/value pairs.

Grid

Tighter 3-column layout. Header band with the record name plus compact label/value rows.

Sidebar

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.

Calendar

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.

Custom HTML

You write a template; SawStream renders it per record. Use {!FieldName} placeholders.

JSON

Stable JSON URL — fetch it from any frontend, mobile app, or workflow.

CSV Download

A URL that triggers a CSV file download. Wire it to a Download button on your site.

Airtable's special field types (linked records, multi-selects, attachments, collaborators) are flattened to readable strings before rendering. Linked-record IDs show as 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>.

Targeting a specific element

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>
JSON and CSV links

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.

Allowed Origins

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.

Leaving allowed origins blank in production means anyone can embed your query on their site.

Your account

Changing your password

Click the lock icon in the sidebar footer. New passwords must be at least 10 characters, include a number, and include a symbol.

Logging out

Click Log out in the sidebar footer.

Non-profit & education pricing

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].