Jobs Export
Download a job search as one CSV file, up to 10,000 rows on every plan, via GET or POST /v1/jobs/export.
GET https://api.jobspipe.dev/v1/jobs/export
POST https://api.jobspipe.dev/v1/jobs/exportDownloads the whole result of a job search as one CSV file instead of page by page. Up to 10,000 rows on every plan. Requires authentication.
Filters
The filters are the job search's, see the filter reference. Send them as a JSON body with POST, or as query parameters with GET. In a query, a list is a repeated parameter, a comma-separated value, or a JSON array when a value holds a comma. Paging fields (limit, offset, page, cursor) are ignored, since the export pages itself. An unknown filter is a 400.
curl https://api.jobspipe.dev/v1/jobs/export \
-H "Authorization: Bearer jp_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"job_title_or": ["data engineer"], "job_country_code_or": ["US"]}' \
-o jobs.csvCredits
Each job not already paid for this calendar month costs what it costs in a search, 1 credit on the standard rate. A job you already got from a search or an earlier export this month is free. Credits are charged when the file ends, only for the rows it holds, and your usage page shows that charge.
Your balance is read again before every page, so the file stops early when your credits run out and never costs more than you have. Your access is checked before every page too: a key revoked or an account disabled mid-file ends it the same way. A file that stops early, or that you stop downloading, is charged only for the rows it holds. Compare its rows with the estimate to see whether it holds the whole search.
The estimate
GET https://api.jobspipe.dev/v1/jobs/export/estimate
POST https://api.jobspipe.dev/v1/jobs/export/estimateFree, and it answers an account with no credits left too. Takes the same filters. If you already ran the search, send its total as total_results beside the filters and no count runs. Without it, a short count runs and rows_approximate is true.
{ "rows": 3412, "rows_approximate": false, "new_jobs_credits": 3100, "new_jobs_credits_exact": false, "stops_at_balance": true, "balance": 3100, "max_rows": 10000 }rows is at most 10,000. new_jobs_credits is the most the export can cost: jobs already paid for this month cost nothing, so the real charge is often lower, and it is never more than your balance. stops_at_balance is true when your credits run out before the last row. balance is what you can spend now, or null when the account has no limit.
The file
A header row, then one row per job: job_title, company, company_domain, employee_count, company_founded, location, country_code, metro_code, metro_label, remote, work_arrangement_source, seniority, seniority_source, employment, min_annual_salary_usd, max_annual_salary_usd, salary_string, salary_source, salary_type, estimated_min_annual_salary_usd, estimated_avg_annual_salary_usd, estimated_max_annual_salary_usd, date_posted, discovered_at, expires_at, skills, esco_skill_ids, visa_sponsorship, benefits, applicant_count, recruiter_emails, listing_type, ghost_score, apply_url. Lists are joined with ; . Text cells that start with =, +, - or @ get a leading ' so spreadsheets do not run them as formulas.
Errors
| Status | Meaning |
|---|---|
400 | Invalid filters. Nothing is charged. |
402 | out_of_credits: you are out of credits and the first job would cost one. |
409 | export_in_progress: another export for this account is running. Try again when it finishes. |
503 | Your credits could not be checked just now. Nothing is charged and no file starts. Retry after the Retry-After seconds. |
502, 504 | The search could not run. Nothing is charged. |