Integrations · Spreadsheets and no-code
Load job postings data into Airtable
Upsert job posts into an Airtable base in batches of ten, matched on the job ID so re-runs never duplicate records.
Steps
You need: Python 3.9+, pip install requests, an Airtable personal access token with write access to the base and a jobdata API key.
- Create a
Jobstable with the fields Job ID (number), Title, Company, Location, Published and Apply link. - Set your jobdata API key, Airtable token and base ID.
- The script upserts in batches of ten (Airtable's limit) and waits between requests to stay under five requests per second.
import requests
API_KEY = "YOUR_API_KEY"
def fetch_jobs(**params):
"""Yield every job for the given filters, following pagination."""
url = "https://jobdataapi.com/api/jobs/"
params = {"page_size": 1000, **params}
headers = {"Authorization": f"Api-Key {API_KEY}"}
while url:
resp = requests.get(url, headers=headers, params=params, timeout=60)
resp.raise_for_status()
data = resp.json()
yield from data["results"]
url, params = data["next"], None # "next" already carries the filters
import time
AIRTABLE_TOKEN = "YOUR_AIRTABLE_TOKEN"
AIRTABLE_URL = "https://api.airtable.com/v0/YOUR_BASE_ID/Jobs"
def upsert(records):
resp = requests.patch(AIRTABLE_URL, timeout=60, headers={
"Authorization": f"Bearer {AIRTABLE_TOKEN}",
}, json={
"performUpsert": {"fieldsToMergeOn": ["Job ID"]},
"records": [{"fields": fields} for fields in records],
"typecast": True,
})
resp.raise_for_status()
time.sleep(0.25)
batch = []
for job in fetch_jobs(max_age=1, title="data engineer"):
batch.append({
"Job ID": job["id"],
"Title": job["title"],
"Company": job["company"]["name"],
"Location": job["location"],
"Published": job["published"],
"Apply link": job["application_url"],
})
if len(batch) == 10:
upsert(batch)
batch = []
if batch:
upsert(batch)
Notes
- Airtable bases have record limits per plan - filter to the roles or regions you actually need.
- Run it daily with
max_age=1to pick up new job posts; on access lite, dropmax_age- the feed covers the past 90 days and upserting byidkeeps it free of duplicates.
Related docs and tutorials
Jobs API Ingestion Guide: Reliable Historical Backfills and Incremental Syncs
A practical guide to high-volume historical backfills and incremental syncs using bounded windows, multi-pass pagination, ID deduplication, and reconciliation.
Integrating the jobdata API with Make
Automate job-data workflows in minutes by connecting the jobdata API to Make with the HTTP v4 module, native pagination, and resilient error handling.
Integrating the jobdata API with Zapier
Use Zapier + the jobdata API to automate job ingestion, alerts, enrichment, and reporting workflows without maintaining custom integrations.
Ready to load real data?
All endpoints are public for limited testing - run the script without a key to see the structure, then add your key. Flat monthly plans with unlimited usage.
More integrations
Explore jobdata API with AI tools
Ask an AI assistant how to search and build with live job data.