Built In Salaries Scraper
Pricing
Pay per event
Built In Salaries Scraper
Scrape Built In salary benchmarks, compensation ranges, and recent salary reports by role and location.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Scrape public Built In salary benchmarks by role and location, including average base salary, additional cash compensation, total compensation, ranges, and recent anonymous salary reports.
Built In Salaries Scraper turns salary pages such as https://builtin.com/salaries/us/software-engineer into structured dataset rows that compensation, recruiting, and market-intelligence teams can analyze immediately.
What does Built In Salaries Scraper do?
Built In Salaries Scraper extracts public compensation data from Built In salary benchmark pages.
It can collect:
- ๐ต Average base salary
- ๐ฐ Average additional cash compensation
- ๐ Average total compensation
- ๐ Median, minimum, and maximum salary values when available
- ๐งพ Recent anonymous salary report rows
- ๐งโ๐ผ Reported job title, experience, gender, company size, and location
- ๐ Related salary table rows when requested
- ๐ Source URL and scrape timestamp for auditability
The actor is HTTP-first and designed for public pages that are visible without logging in.
Who is it for?
This actor is useful for teams that need repeatable salary benchmark exports.
Typical users include:
- ๐งโ๐ผ Recruiters comparing compensation for open roles
- ๐ People operations teams preparing salary bands
- ๐งฎ Compensation analysts tracking market movement
- ๐ข Startup operators benchmarking offers against tech-market data
- ๐ Job-market analysts combining salary and hiring signals
- ๐งโ๐ป Developers building salary intelligence dashboards
Why use this actor?
Built In pages are useful in a browser, but manual copy-paste does not scale.
This actor gives you:
- Structured rows instead of page text
- Repeatable runs for the same role list
- Dataset exports in JSON, CSV, Excel, XML, and RSS via Apify
- API access for scheduled compensation monitoring
- A low-memory HTTP implementation suitable for economical recurring jobs
How much does it cost to scrape Built In salary data?
This actor uses pay-per-event pricing.
- A small start event is charged once per run.
- A result event is charged for each salary benchmark, recent salary report, or related salary row saved.
Current platform pricing is configured as a small $0.005 start event plus tiered result pricing. Result events are charged per saved salary benchmark, recent salary report, or related salary row.
| Tier | Price per result | Approx. price per 1,000 results |
|---|---|---|
| FREE | $0.00005 | $0.050 |
| BRONZE | $0.000043478 | $0.043 |
| SILVER | $0.000033913 | $0.034 |
| GOLD | $0.000026087 | $0.026 |
| PLATINUM | $0.000017391 | $0.017 |
| DIAMOND | $0.000012174 | $0.012 |
To control costs:
- Keep
maxItemslow for your first run. - Use direct URLs when you know the exact pages.
- Disable related salary rows unless you need discovery data.
- Limit recent report rows with
maxReportsPerPage.
Input options
You can provide direct salary URLs, role names, or both.
Built In salary URLs
Use startUrls for exact pages:
[{ "url": "https://builtin.com/salaries/us/software-engineer" }]
Direct URLs are best for city/category pages because Built In URL structures can vary by role family.
Role names or slugs
Use roles for national Built In salary pages:
["Software Engineer", "Data Engineer"]
The actor converts these to /salaries/us/<role-slug> URLs.
Locations
Use locations to request national or discovered city pages.
Examples:
USAustinSeattleNew York
For city locations, the actor first fetches the role page and follows matching salary links found in the public HTML.
Example input
{"roles": ["Software Engineer"],"locations": ["US"],"maxItems": 25,"maxReportsPerPage": 20,"includeBenchmark": true,"includeRecentReports": true,"includeRelatedSalaries": false}
Output data
Each dataset row contains salary context plus fields for the selected record type.
| Field | Description |
|---|---|
recordType | benchmark, salary_report, or related_salary |
sourceUrl | Built In source page |
role | Role extracted from the page title |
location | Location extracted from the page title |
averageBaseSalary | Average base salary in USD |
additionalCashCompensation | Average additional cash compensation in USD |
averageTotalCompensation | Average total compensation in USD |
medianSalary | Median salary when available |
minSalary | Minimum salary when available |
maxSalary | Maximum salary when available |
reportedTitle | Recent salary report job title |
reportedSalary | Recent salary report yearly salary |
reportedAdditionalCash | Recent report additional cash compensation |
reportedExperience | Experience bucket from the report row |
reportedGender | Gender value shown in the report row |
reportedCompanySize | Company-size bucket from the report row |
reportedLocation | Location shown in the report row |
relatedTitle | Related role or city salary table title |
relatedAverageSalary | Related salary average |
relatedUrl | Related Built In salary URL |
scrapedAt | ISO timestamp when the row was extracted |
Record types
The actor uses one dataset with a recordType field.
benchmark
One row per salary page with summary compensation fields.
salary_report
One row per recent anonymous salary report, with benchmark fields repeated for context.
related_salary
One row per related salary table entry when includeRelatedSalaries is enabled.
Tips for best results
- Start with one role and
maxItemsaround 25. - Use direct Built In salary URLs for niche city pages.
- Turn on related salaries when you want discovery rows.
- Use
maxReportsPerPageto prevent one page from consuming the full item limit. - Schedule repeat runs if you need compensation trend snapshots.
Integrations
You can connect the dataset to:
- Google Sheets for compensation review workflows
- BI tools for market dashboards
- Applicant tracking systems for offer calibration
- Data warehouses for historical salary trend analysis
- Slack alerts for scheduled benchmark monitoring
A common workflow is:
- Run the actor weekly for priority roles.
- Export CSV or push dataset rows via API.
- Compare current averages with internal salary bands.
- Flag roles where market compensation changed materially.
API usage
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/builtin-salaries-scraper').call({roles: ['Software Engineer'],locations: ['US'],maxItems: 25});console.log(run.defaultDatasetId);
Python
from apify_client import ApifyClientclient = ApifyClient('MY-APIFY-TOKEN')run = client.actor('automation-lab/builtin-salaries-scraper').call(run_input={'roles': ['Software Engineer'],'locations': ['US'],'maxItems': 25,})print(run['defaultDatasetId'])
cURL
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~builtin-salaries-scraper/runs?token=MY-APIFY-TOKEN' \-H 'Content-Type: application/json' \-d '{"roles":["Software Engineer"],"locations":["US"],"maxItems":25}'
MCP usage
Use Apify MCP to call this actor from Claude Desktop, Claude Code, or compatible clients.
MCP server URL:
https://mcp.apify.com/?tools=automation-lab/builtin-salaries-scraper
Claude Code quick add command:
$claude mcp add apify-builtin-salaries https://mcp.apify.com/?tools=automation-lab/builtin-salaries-scraper
Claude Desktop JSON configuration:
{"mcpServers": {"apify-builtin-salaries": {"url": "https://mcp.apify.com/?tools=automation-lab/builtin-salaries-scraper"}}}
Example prompts:
- "Scrape Built In salary reports for Software Engineer in the US."
- "Get Built In salary benchmarks for Data Engineer and summarize total compensation."
- "Run the Built In Salaries Scraper and export salary report rows as a table."
Scheduling
Use Apify schedules for recurring salary monitoring.
Recommended cadence:
- Weekly for active recruiting roles
- Monthly for compensation-band review
- Quarterly for broad market benchmarking
Keep input lists small at first, then scale after you confirm the dataset shape matches your workflow.
Legality
This actor extracts publicly available salary benchmark pages.
You are responsible for using the data in accordance with applicable laws, Built In terms, and privacy requirements. Do not use scraped data for prohibited discrimination, unlawful employment decisions, or any purpose that violates local regulations.
Troubleshooting
Why did I get fewer rows than maxItems?
maxItems is a cap, not a guarantee. A page may show fewer recent reports than requested, or related rows may be disabled.
Why is a city page missing?
City URL structures can vary. Provide the direct Built In salary URL when you need a specific city/category page.
Why are some fields empty?
Built In does not show every metric on every page. The actor preserves missing values as null instead of guessing.
FAQ
Can I scrape multiple roles in one run?
Yes. Add multiple role names to roles and set maxItems high enough for the expected reports.
Do I need a Built In account?
No. The actor targets public salary pages visible without login.
Does it use a browser?
No. The implementation uses HTTP requests and HTML parsing for lower overhead.
Can I export to CSV?
Yes. Apify datasets can be downloaded as CSV, JSON, Excel, XML, RSS, and HTML.
Related scrapers
Other automation-lab actors that pair well with salary intelligence:
- https://apify.com/automation-lab/builtin-jobs-scraper
- https://apify.com/automation-lab/builtin-companies-scraper
- https://apify.com/automation-lab/google-jobs-scraper
Changelog
Initial version:
- HTTP extraction for Built In salary benchmark pages
- Summary benchmark rows
- Recent salary report rows
- Optional related salary rows
- Role and location input helpers
Support
If a page stops extracting correctly, include the Built In salary URL, actor input, and run ID in your report so the issue can be reproduced quickly.