Airbnb Careers Scraper
Pricing
Pay per event
Airbnb Careers Scraper
Extract Airbnb careers jobs, locations, departments, workplace type, role text, and apply URLs. Export to JSON/CSV, schedule monitoring, and track hiring signals.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Extract public Airbnb job listings and job-detail pages from careers.airbnb.com.
Use this actor to monitor Airbnb hiring signals, collect current open roles, and feed recruiting, market-intelligence, sales, and workforce-analysis workflows.
What does Airbnb Careers Scraper do?
Airbnb Careers Scraper collects structured job data from the public Airbnb careers site.
It starts from the Airbnb positions page or a specific Airbnb job URL.
It discovers job cards from listing pages.
It can follow pagination.
It can open job detail pages.
It saves each role as a clean dataset item.
It includes fields such as title, job ID, department, location, workplace type, role text, apply URL, and scrape timestamp.
No Airbnb account is required.
No login cookies are required.
No browser automation is required for the current public pages.
Who is it for?
Recruiting and talent teams
Recruiters use it to watch which Airbnb teams are actively hiring, which locations are opening roles, and which job families are gaining headcount.
Talent sourcers use it to build target lists by department, location, or keyword, then route the exported roles into sourcing or talent-mapping workflows.
Job seekers use it to export Airbnb openings into their own tracking sheets and monitor changes without manually revisiting the careers site.
Sales and growth teams
Sales teams use hiring activity as a signal for growth, expansion, new budgets, or organizational change inside a strategic account.
Partnership teams use the data to understand which Airbnb functions may need services, vendors, or tooling based on current hiring patterns.
Market research and competitive intelligence teams
Market researchers use it to understand Airbnb workforce priorities by department, role type, and geography.
Competitive-intelligence teams use it to track new roles over time and compare hiring direction against other travel, marketplace, or hospitality companies.
Travel analysts use it to connect hiring signals with market strategy, product investment, compliance focus, and regional expansion.
Founders, operators, and analysts
Founders use it to study team-building patterns at a major travel platform.
Operators and workforce analysts use it to feed dashboards, scheduled monitors, and internal reports with repeatable public careers data.
Why use this actor?
✅ It targets Airbnb's public careers pages directly.
✅ It returns structured records instead of raw HTML.
✅ It supports listing and detail URLs.
✅ It includes optional filters for department, location, workplace type, and keyword.
✅ It can extract job body text for downstream analysis.
✅ It works well in scheduled monitoring workflows.
✅ It is lightweight because it uses HTTP extraction.
Data fields
| Field | Description |
|---|---|
jobId | Numeric Airbnb/Greenhouse job identifier when available |
title | Job title |
jobUrl | Airbnb careers detail page URL |
department | Department or function shown on the listing page |
team | Team value, usually the same as department |
locations | List of visible locations |
workplaceType | Work-flexibility label such as hybrid or work-anywhere |
listingPage | Listing page where the role was discovered |
listingOrder | Position of the role on the listing page |
descriptionText | Clean role overview text from the detail page |
responsibilities | Extracted lines that appear to describe responsibilities |
qualifications | Extracted lines that appear to describe qualifications or skills |
applyUrl | Public Greenhouse apply/job URL inferred from the job ID |
postedDate | Nullable placeholder if Airbnb exposes a posted date |
updatedDate | Nullable placeholder if Airbnb exposes an updated date |
scrapedAt | ISO timestamp when the item was saved |
How much does it cost to scrape Airbnb careers jobs?
This actor uses pay-per-event pricing.
A small start fee of $0.005 is charged once per run.
A per-job event is charged for each saved job record.
Current per-job tier prices:
| Tier | Price per saved job |
|---|---|
| FREE | $0.000095 |
| BRONZE | $0.000083 |
| SILVER | $0.000065 |
| GOLD | $0.00005 |
| PLATINUM | $0.000033 |
| DIAMOND | $0.000023 |
For a typical HTTP run, compute costs are low.
The final platform pricing is visible on the Apify actor page before you start a run.
Use a low maxItems value for your first test.
Then increase maxItems for scheduled monitoring or full exports.
How to use Airbnb Careers Scraper
-
Open the actor on Apify.
-
Keep the default start URL:
https://careers.airbnb.com/positions/. -
Set
maxItemsto the number of jobs you want. -
Add an optional department, location, workplace type, or search term.
-
Keep
includeDetailsenabled if you need role body text. -
Start the run.
-
Export the dataset as JSON, CSV, Excel, XML, or through the API.
Input options
Start URLs
Use the main Airbnb careers positions page to discover open roles.
You can also provide a direct job detail URL.
Examples:
-
https://careers.airbnb.com/positions/ -
https://careers.airbnb.com/positions/7732569/
Maximum jobs
maxItems controls how many job records are saved.
The default is intentionally small for a cheap first run.
Set a larger value to export more open roles.
Search term
Use searchTerm for broad keyword filtering.
Examples:
-
data -
engineering -
marketing -
remote
Departments
Use departments to keep roles from specific Airbnb functions.
Examples:
-
Engineering -
Data Science -
Account Management
Locations
Use locations to keep roles for specific locations.
Examples:
-
United States -
Paris -
Bangalore -
Remote
Workplace types
Use workplaceTypes for Airbnb's public flexibility labels.
Examples:
-
Live and Work Anywhere -
Hybrid - Be close to an office
Include details
When includeDetails is true, the actor opens each job page.
This adds role body text, responsibility snippets, qualification snippets, and apply URL.
Disable it when you only need a fast list of titles and locations.
Example input
{"startUrls": [{ "url": "https://careers.airbnb.com/positions/" }],"maxItems": 25,"searchTerm": "data","includeDetails": true}
Example output
{"jobId": "7732569","title": "(Contract) Senior Data Scientist, Platform Inference - MarTech DS Measurement","jobUrl": "https://careers.airbnb.com/positions/7732569/","department": "Data Science","team": "Data Science","locations": ["United States"],"workplaceType": "Live and Work Anywhere","listingPage": "https://careers.airbnb.com/positions/","listingOrder": 1,"descriptionText": "Airbnb was born in 2007...","responsibilities": "...","qualifications": "...","applyUrl": "https://job-boards.greenhouse.io/airbnb/jobs/7732569","postedDate": null,"updatedDate": null,"scrapedAt": "2026-06-07T00:00:00.000Z"}
Tips for best results
Start with the default URL.
Use maxItems: 10 for a quick test.
Use includeDetails: false for faster listing-only exports.
Use includeDetails: true for role-analysis workflows.
Use filters only when you need a subset.
Leave filters blank to export all visible roles up to your limit.
Schedule the actor daily or weekly to monitor changes.
Store previous datasets if you want to compare hiring trends over time.
Integrations
Send results to Google Sheets for recruiter review.
Send results to Airtable for talent-pipeline tracking.
Send results to a CRM to enrich company-growth signals.
Send results to a warehouse for longitudinal hiring analysis.
Trigger Slack alerts when new matching roles appear.
Connect with Apify webhooks for automated downstream processing.
Use dataset API endpoints for dashboards and BI tools.
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/airbnb-careers-scraper').call({startUrls: [{ url: 'https://careers.airbnb.com/positions/' }],maxItems: 25,includeDetails: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
API usage with Python
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/airbnb-careers-scraper').call(run_input={'startUrls': [{'url': 'https://careers.airbnb.com/positions/'}],'maxItems': 25,'includeDetails': True,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
API usage with cURL
curl -X POST "https://api.apify.com/v2/acts/automation-lab~airbnb-careers-scraper/runs?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"startUrls":[{"url":"https://careers.airbnb.com/positions/"}],"maxItems":25,"includeDetails":true}'
MCP usage
Use this actor from MCP-compatible tools through Apify MCP.
Claude Code MCP add command:
$claude mcp add apify-airbnb-careers "https://mcp.apify.com/?tools=automation-lab/airbnb-careers-scraper"
Claude Code MCP URL:
https://mcp.apify.com/?tools=automation-lab/airbnb-careers-scraper
Claude Desktop MCP JSON configuration:
{"mcpServers": {"apify-airbnb-careers": {"url": "https://mcp.apify.com/?tools=automation-lab/airbnb-careers-scraper"}}}
Claude Desktop MCP URL:
https://mcp.apify.com/?tools=automation-lab/airbnb-careers-scraper
Example prompts:
-
"Scrape the latest Airbnb data science roles and summarize the locations."
-
"Find Airbnb roles mentioning marketing measurement."
-
"Export Airbnb engineering jobs and group them by workplace type."
Scheduling workflows
Run the actor every day to detect new Airbnb roles.
Run it weekly to track broader hiring trends.
Compare each dataset with the previous run.
Alert only when a new job ID appears.
Filter by department to keep alerts focused.
Common use cases
Monitor Airbnb hiring activity.
Track growth in specific departments.
Watch international expansion signals.
Build recruiter target lists.
Analyze skill requirements in job descriptions.
Compare workplace flexibility language over time.
Feed company-intelligence dashboards.
Troubleshooting
Why did I get fewer jobs than maxItems?
The source may have fewer jobs matching your filters.
Try removing filters or increasing the number of listing pages by raising maxItems.
Why are postedDate and updatedDate null?
Airbnb's public careers HTML does not consistently expose those dates.
The fields are included for schema stability if the source starts exposing them later.
Why is the apply URL on Greenhouse?
Airbnb embeds a Greenhouse application form and exposes the public Greenhouse job ID.
The actor builds the corresponding public Greenhouse job URL from that ID.
Data quality notes
Airbnb can change page markup without notice.
The actor is built for the current public WordPress/FacetWP careers pages.
It does not bypass login walls.
It does not scrape private applicant data.
It collects only publicly visible job information.
Legality
This actor collects publicly available career-page information.
You are responsible for using the data lawfully.
Respect applicable laws, contracts, and platform terms.
Do not use the output for unlawful discrimination, spam, or prohibited profiling.
If in doubt, consult your legal counsel.
Related scrapers
Explore related actors from Automation Lab:
FAQ
Does this actor require an Airbnb login?
No. It uses public careers pages.
Does it use a browser?
No. It uses HTTP requests and HTML parsing for the current site.
Can I scrape one specific job?
Yes. Provide a direct Airbnb job detail URL in startUrls.
Can I filter by location?
Yes. Use the locations input array.
Can I filter by team?
Yes. Use the departments input array.
Can I export to CSV?
Yes. Apify datasets support CSV, JSON, Excel, XML, RSS, and API exports.
Can I run it on a schedule?
Yes. Use Apify schedules to run it daily, weekly, or monthly.
Can it find closed jobs?
No. It extracts jobs currently visible on Airbnb's public careers pages.
Can it scrape applicant information?
No. It only collects public job posting information.
What should I do if results look empty?
Check your filters first.
Then run with the default input and a small maxItems value.
If the default input returns no results, the source markup may have changed.