Built In Salaries Scraper avatar

Built In Salaries Scraper

Pricing

Pay per event

Go to Apify Store
Built In Salaries Scraper

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

Stas Persiianenko

Maintained by Community

Actor 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.

TierPrice per resultApprox. 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 maxItems low 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:

  • US
  • Austin
  • Seattle
  • New 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.

FieldDescription
recordTypebenchmark, salary_report, or related_salary
sourceUrlBuilt In source page
roleRole extracted from the page title
locationLocation extracted from the page title
averageBaseSalaryAverage base salary in USD
additionalCashCompensationAverage additional cash compensation in USD
averageTotalCompensationAverage total compensation in USD
medianSalaryMedian salary when available
minSalaryMinimum salary when available
maxSalaryMaximum salary when available
reportedTitleRecent salary report job title
reportedSalaryRecent salary report yearly salary
reportedAdditionalCashRecent report additional cash compensation
reportedExperienceExperience bucket from the report row
reportedGenderGender value shown in the report row
reportedCompanySizeCompany-size bucket from the report row
reportedLocationLocation shown in the report row
relatedTitleRelated role or city salary table title
relatedAverageSalaryRelated salary average
relatedUrlRelated Built In salary URL
scrapedAtISO 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 maxItems around 25.
  • Use direct Built In salary URLs for niche city pages.
  • Turn on related salaries when you want discovery rows.
  • Use maxReportsPerPage to 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:

  1. Run the actor weekly for priority roles.
  2. Export CSV or push dataset rows via API.
  3. Compare current averages with internal salary bands.
  4. 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 ApifyClient
client = 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.

Other automation-lab actors that pair well with salary intelligence:

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.