Overview
Available credits
Unit rate
Rate limit
API key
No active key
Send it in the x-api-key header. Keys in the URL are rejected.
Production Batch Starter Scripts & Quickstart
Paginates across 434 ATS & career-site sources and exports company domains, titles, annual salary bands, and apply URLs to CSV.
import csv, requests
API_KEY = "jp_your_api_key"
jobs, cursor = [], None
while len(jobs) < 500:
params = {"q": "software engineer", "remote": "true", "license_class": "redistributable", "limit": 100}
if cursor:
params["cursor"] = cursor
res = requests.get(
"https://api.jobpostingsapi.com/v1/jobs/search",
params=params,
headers={"x-api-key": API_KEY},
timeout=30,
).json()
batch = res.get("data") or []
if not batch:
break
for job in batch:
comp = job.get("compensation") or {}
company = job.get("company") or {}
jobs.append({
"id": job.get("id"),
"title": job.get("title"),
"company": company.get("name"),
"domain": company.get("domain"),
"min_annual_usd": comp.get("min_annual_usd"),
"max_annual_usd": comp.get("max_annual_usd"),
"apply_url": job.get("apply_url"),
})
meta = res.get("meta") or {}
if not meta.get("has_more"):
break
cursor = meta.get("next_cursor")
with open("gtm_hiring_signals.csv", "w", newline="", encoding="utf-8") as f:
w = csv.DictWriter(f, fieldnames=["id", "title", "company", "domain", "min_annual_usd", "max_annual_usd", "apply_url"])
w.writeheader()
w.writerows(jobs)
print(f"Saved {len(jobs)} jobs to gtm_hiring_signals.csv")Replace jp_your_api_key with your key, or click Generate new key to inject your live key into these scripts automatically.