🌱 Greenhouse Jobs API
Pricing
from $4.99 / 1,000 results
🌱 Greenhouse Jobs API
🌱 Greenhouse Jobs API (greenhouse-jobs-api) fetches live job listings from Greenhouse effortlessly. 🚀 Perfect for recruiters, job boards & developers building accurate, up-to-date career search experiences. 📈 Automate discovery with clean, reliable data.
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
Scraper Engine
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a month ago
Last modified
Categories
Share
🌱 Greenhouse Jobs API Scraper
Pull every public job posting from any company that hosts its careers page on Greenhouse — straight from the official Greenhouse Boards API. Just paste one or more board URLs and get a clean, structured dataset with 94 fields per job, including geocoded locations and published salary ranges.
⚡ No login. No browser. Direct from
boards-api.greenhouse.io.
💡 Why Choose This Actor?
- 🎯 Source-direct — reads the official Greenhouse Boards API, so data is fresh and complete (no stale aggregation).
- 🔗 Bulk input — drop in as many board URLs as you like; tokens are auto-extracted from any Greenhouse URL format.
- 🌍 Geocoding built in — messy office addresses are resolved to city / region / country / timezone / lat-lng via OpenStreetMap, and cached for fast repeat runs.
- 💰 Salary enrichment — pulls published pay-transparency ranges per job.
- 🛡️ Bulletproof proxy fallback — starts direct, then automatically climbs to datacenter and residential proxies only if Greenhouse pushes back.
- 📊 94-field schema — the same comprehensive shape used by premium ATS feeds.
✨ Key Features
| Feature | Description |
|---|---|
| 🔍 Title / Location / Org / Domain filters | Include & exclude lists with :* prefix matching |
| 📝 Description search | Full-text search across title + description |
| 💵 Salary ranges | Per-job pay-transparency data |
| 🌍 Derived location fields | Cities, regions, countries, timezones, lat/lng |
| 🧾 Text or HTML descriptions | Your choice |
| 🛡️ Proxy ladder | direct → datacenter → residential (sticky) |
| 📤 Live saving | Records stream to the dataset as they finish |
📥 Input
| Field | Type | Description |
|---|---|---|
urls ✅ | array | Greenhouse board URLs or plain tokens (bulk). Required. |
limit | integer | Max jobs per run (200–5000). |
includeCompanyDetails | boolean | Include company-data columns (LinkedIn/Crunchbase/logo). |
titleSearch / titleExclusionSearch | array | Keep / drop by title. |
locationSearch / locationExclusionSearch | array | Keep / drop by location. |
organizationSearch / organizationExclusionSearch | array | Keep / drop by company. |
domainFilter / domainExclusionFilter | array | Keep / drop by company domain (exact). |
descriptionSearch / descriptionExclusionSearch | array | Search/exclude in title + description. |
descriptionType | string | text or html. |
hasSalary | boolean | Keep only jobs with a published salary. |
fetchSalaryData | boolean | Fetch pay ranges even when hasSalary is off. |
geocodeLocations | boolean | Fill the *_derived location fields. |
maxRetries / concurrency | integer | Tuning knobs. |
proxyConfiguration | object | Proxy settings (defaults to no proxy). |
Example input
{"urls": [{ "url": "https://job-boards.greenhouse.io/datadog" },{ "url": "https://job-boards.greenhouse.io/stripe" }],"limit": 200,"titleSearch": ["Engineer:*"],"fetchSalaryData": true,"geocodeLocations": true,"proxyConfiguration": { "useApifyProxy": false }}
📤 Output
Each record follows the full 94-field schema. The dataset ships with 5 per-section views in the Console: 📋 Overview, 🌍 Location, 💰 Salary, 🏢 Company, 📝 Description.
Example record (truncated)
{"id": 4567890,"title": "Senior Software Engineer","organization": "Datadog","url": "https://job-boards.greenhouse.io/datadog/jobs/4567890","source": "greenhouse","source_domain": "job-boards.greenhouse.io","date_posted": "2026-06-11T10:22:02","locations_alt": ["New York, NY"],"cities_derived": ["New York"],"regions_derived": ["New York"],"countries_derived": ["United States"],"timezones_derived": ["America/New_York"],"lats_derived": [40.7127281],"lngs_derived": [-74.0060152],"ai_salary_currency": "USD","ai_salary_min_value": 150000.0,"ai_salary_max_value": 220000.0,"ai_salary_unit_text": "YEAR","description_text": "About the role …"}
ℹ️ The
ai_*,org_linkedin_*,linkedin_org_*, andorg_crunchbase_*columns are vendor-side AI/LinkedIn enrichments with no public Greenhouse source. They are present in the schema for parity and emitted asnull(salaryai_salary_*fields are filled from the published pay ranges).
🚀 How to Use (Apify Console)
- Log in at console.apify.com → Actors.
- Open Greenhouse Jobs API Scraper.
- Paste your Greenhouse board URLs into 🔗 Greenhouse Board URLs.
- (Optional) Set filters, salary, geocoding, and proxy.
- Click Start.
- Watch the real-time log as boards are fetched, salaries pulled, and locations geocoded.
- Open the Output tab → switch between the per-section views.
- Export to JSON / CSV / XLSX.
🤖 Use via API
curl -X POST "https://api.apify.com/v2/acts/<ACTOR_ID>/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"urls":[{"url":"https://job-boards.greenhouse.io/datadog"}],"limit":200}'
🎯 Best Use Cases
- 📈 Job-market & hiring-trend analysis
- 🧭 Sourcing & recruiting pipelines
- 🏢 Competitive hiring intelligence
- 💼 Building job boards / aggregators
💳 Pricing
This actor uses the Pay-Per-Event model:
| Event | Bills for |
|---|---|
job-item | Each job posting saved to the dataset |
You only pay for the jobs you actually receive. Runs that hit your charge limit stop cleanly.
❓ FAQ
Which URLs are accepted? Any Greenhouse board URL — job-boards.greenhouse.io/<token>, boards.greenhouse.io/<token>, boards-api.greenhouse.io/v1/boards/<token>, embed links, or a plain token like datadog.
Why are the LinkedIn/Crunchbase columns null? They require third-party enrichment data that a direct Greenhouse scrape doesn't have. They're kept for schema parity.
Do I need a proxy? No. The actor runs direct by default and only escalates to datacenter/residential proxies if Greenhouse blocks a request.
How does geocoding work? Locations are resolved via OpenStreetMap/Nominatim (1 req/s), cached across runs so repeat scrapes are fast.
🛟 Support & Feedback
Found a bug or want a new field? Open an issue on the Actor's Issues tab.
⚖️ Legal
Data is collected only from publicly available Greenhouse job boards. You are responsible for compliance with applicable laws (GDPR, CCPA, target ToS).