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
- The next page is offset, a cursor, not a page number. tlly will not follow it. pageSize max is 100. More than 100 matching records are truncated. Say so, or push a total.
- POST …/listRecords exists for long URLs. Do not use it with a stored secret.
- Dates stored as Airtable date fields come back as JSON, not as a display string, unless you set cellFormat=string (which also requires timeZone and userLocale). Prefer the default JSON.
- Rate limit number: not on the list-records page we checked. Daily is enough.
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.