« tlly.dev

Playbooks · Integrations

Airtable

GET records with data.records:read. Offset paging is a cursor tlly does not follow.

What you can track

A numeric field on records in one table: sum or count by createdTime, or a single snapshot if you filter to one row and omit the date only when the response is one JSON value. A list still needs extract.date on current main.

Credential

A personal access token with scope data.records:read, and access to that base. The user role on the base should be read-only. Bearer.

Host: api.airtable.com. Suggested name: AIRTABLE_TOKEN.

Where to get it

Airtable → account → developer hub → personal access tokens. Create a token with data.records:read and only the base you chart. List records.

tlly job

{"series":"airtable_rows","cron":"0 7 * * *","request":{"url":"https://api.airtable.com/v0/BASE_ID/TABLE_ID?pageSize=100","headers":{"Authorization":"Bearer {{secret:AIRTABLE_TOKEN}}"}},"extract":{"format":"json","items":"records","date":"createdTime","value":"fields.Amount","aggregate":"sum"}}

fields.Amount must be the real field name. Empty cells are omitted from the record, so a missing number is skipped, not zero. Use the table id rather than its name so a rename does not break the URL.

Gotchas

Alert ideas

Red when the summed Amount drops below target. Yellow when today’s count of new records (createdTime) is zero.

Verification

Checked 2026-10-26: GET https://api.airtable.com/v0/{baseId}/{tableIdOrName}, Bearer, scope data.records:read, pageSize ≤ 100, offset, records[].createdTime, records[].fields. The POST listRecords alternative is documented there and is not a tlly job.