[Integration] Map & test Airtable integration #35

Open
opened 2026-03-23 08:39:18 -07:00 by pyr0ball · 0 comments
Owner

Airtable — Job Pipeline Sync

Sync the job pipeline to an Airtable base as an alternative to Notion for users who prefer Airtable's spreadsheet-style interface.

Current state

scripts/integrations/airtable.py exists (41 lines, 4 methods).

Tasks

Mapping

  • Document required credentials: Airtable Personal Access Token, Base ID, Table name/ID
  • Map Peregrine job schema → Airtable field types:
    • title, company → Single line text
    • url → URL field
    • status → Single select (with Peregrine statuses as options)
    • match_score → Number (percentage)
    • salary, location → Single line text
    • date_found, applied_at → Date fields
    • cover_letter → Long text
  • Document how to find Base ID and Table ID from Airtable URL
  • Config file format: config/integrations/airtable.yaml

Implementation

  • Implement AirtableIntegration.connect() — store PAT + base/table IDs
  • Implement AirtableIntegration.test() — GET first record to validate credentials
  • Implement AirtableIntegration.sync(jobs) — upsert records (match on URL to avoid dupes)
  • Handle Airtable rate limits (5 req/sec) with backoff

Testing

  • Unit test: field mapping produces valid Airtable record format
  • Integration test: sync a single job → verify it appears in Airtable
  • Integration test: re-sync same job → record updated, not duplicated
  • Test rate limit handling

Acceptance criteria

  • Settings → Integrations shows Airtable card with PAT, Base ID, Table Name fields
  • Test validates live access to the configured base
  • Sync pushes approved/applied jobs to Airtable with correct field types
## Airtable — Job Pipeline Sync Sync the job pipeline to an Airtable base as an alternative to Notion for users who prefer Airtable's spreadsheet-style interface. ### Current state `scripts/integrations/airtable.py` exists (41 lines, 4 methods). ### Tasks **Mapping** - [ ] Document required credentials: Airtable Personal Access Token, Base ID, Table name/ID - [ ] Map Peregrine job schema → Airtable field types: - title, company → Single line text - url → URL field - status → Single select (with Peregrine statuses as options) - match_score → Number (percentage) - salary, location → Single line text - date_found, applied_at → Date fields - cover_letter → Long text - [ ] Document how to find Base ID and Table ID from Airtable URL - [ ] Config file format: `config/integrations/airtable.yaml` **Implementation** - [ ] Implement `AirtableIntegration.connect()` — store PAT + base/table IDs - [ ] Implement `AirtableIntegration.test()` — GET first record to validate credentials - [ ] Implement `AirtableIntegration.sync(jobs)` — upsert records (match on URL to avoid dupes) - [ ] Handle Airtable rate limits (5 req/sec) with backoff **Testing** - [ ] Unit test: field mapping produces valid Airtable record format - [ ] Integration test: sync a single job → verify it appears in Airtable - [ ] Integration test: re-sync same job → record updated, not duplicated - [ ] Test rate limit handling ### Acceptance criteria - Settings → Integrations shows Airtable card with PAT, Base ID, Table Name fields - Test validates live access to the configured base - Sync pushes approved/applied jobs to Airtable with correct field types
pyr0ball added this to the Paid Tier GA milestone 2026-03-23 08:39:18 -07:00
pyr0ball added the
feature-request
label 2026-03-23 08:39:18 -07:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Circuit-Forge/peregrine#35
No description provided.