PayScale Salary Scraper
parseforge/payscale-scraper
JobsAutomationOther
Scrapes PayScale salary research pages by job title, category, or direct URL and returns each profile as a flat row with base pay, bonus, and experience breakdowns.
- Total users
- 9
- Monthly active
- 2
- Total runs
- 561
- Bookmarked
- 1
- Rating
- Not rated yet
- Last modified
- 12 days ago
Overview
PayScale Salary Scraper
Scrape PayScale salary data for any job title, category, or direct URL, up to a million records per run. Every record includes base pay ranges, bonus data, experience percentiles, and common benefits. No login or API key. Export to CSV, JSON, Excel, or XML.
PayScale's compensation reports are scattered across thousands of job-title pages and category listings, making manual collection slow and inconsistent. This Actor reads the public salary research pages directly, driven by a list of job titles, a job category, or a specific URL. It returns each salary profile in one flat, consistent row so you can compare compensation across roles, industries, and countries without copying and pasting.
| Who uses it | What they scrape PayScale for |
|---|---|
| HR analysts | Benchmarking internal salary bands against current market rates for specific roles. |
| Recruiters | Building compensation packages that are competitive for the roles they are hiring. |
| Job seekers | Researching fair pay ranges for a target job title before negotiating an offer. |
| Market researchers | Tracking compensation trends across entire job categories over time. |
What it does
This Actor collects PayScale salary profiles by job title, job category, or direct URL and returns each one as a flat row with base pay, bonus, and experience-level breakdowns.
- ๐ Job title list: Provide a list of job titles and the Actor fetches the salary page for each one.
- ๐ Job category browsing: Select a PayScale job category to scrape salary data for every role listed within it.
- ๐ Direct URL input: Paste a single PayScale research URL to scrape exactly that page.
- ๐ Multi-country support: Target salary data for the US, Canada, UK, Australia, India, Germany, France, Netherlands, or Singapore.
Results export to CSV, JSON, Excel, or XML, or straight from the API.
What you can do with PayScale data
๐ฐ Build a compensation benchmark dataset.
An HR analyst runs the Actor on a list of 50 engineering job titles and exports the CSV to compare their company's bands against market medians.
๐ Monitor salary trends across an industry.
A market researcher scrapes the entire Information Technology category monthly and tracks how base pay and bonus ranges shift over time.
๐ Prepare for a job offer negotiation.
A job seeker scrapes the salary page for 'Senior Product Manager' in their city to see the typical base pay range and common benefits before the final round.
๐ Compare compensation by country.
A global staffing agency runs the same job title against the US, GB, and DE country codes to price a remote role fairly across regions.
Why choose this scraper
| What you get | |
|---|---|
| Consistent schema | Every job title returns the same fields, so you can merge runs without cleaning. |
| No auth needed | Reads public PayScale research pages without an account or API key. |
| Bulk collection | Feed in dozens of job titles or an entire category and collect all of them in one run. |
How it compares
This Actor focuses on salary data collection from job titles and categories, while the other PayScale scraper on Apify adds company culture and review data.
| Feature | ParseForge | PayScale Salary & Company Culture Scraper |
|---|---|---|
| Scrape by job title list | Yes | Not listed |
| Scrape by job category | Yes | Not listed |
| Multi-country salary data | Yes, 9 countries supported | Not listed |
| Company culture ratings | Not listed | Yes |
| Employee reviews | Not listed | Yes |
| Direct URL input | Yes | Not listed |
Configure the run
Drive the Actor from job titles, a job category, or a direct PayScale URL, and set a maximum record count to cap the size of your dataset. The Input tab lists every parameter.
A first run with the defaults:
{
"jobTitles": [
"Software Engineer",
"Data Scientist",
"Registered Nurse (RN)"
],
"category": "Information-Technology",
"country": "US",
"maxItems": 10
}
A larger pull:
{
"jobTitles": [
"Software Engineer",
"Data Scientist",
"Registered Nurse (RN)"
],
"category": "Information-Technology",
"country": "US",
"maxItems": 200
}
Pricing
Pay-per-result: $0.0085 per result collected. You pay only for the results written to your dataset.
| Results collected | Approximate cost |
|---|---|
| 100 results | $0.85 |
| 1,000 results | $8.50 |
| 10,000 results | $85.00 |
New Apify accounts start with $5 in free credit.
Free users
Free-plan runs return up to 10 results as a preview. Upgrade your Apify plan to collect up to 1,000,000 results per run.
Run it
- Create a free Apify account with $5 in credit.
- Open the PayScale Salary Scraper.
- Set your inputs and any filters, then click Start.
- Export the results as CSV, Excel, JSON, or XML from the Dataset tab.
Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.
Use with AI agents (MCP)
Give an AI agent live access to PayScale through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/payscale-scraper"
Then prompt it in plain language to run the scraper and read back the results.
Troubleshooting
Why am I getting no results?
Check that your job titles match PayScale's naming convention. Try browsing a category first to see the exact title format, or use a direct URL to verify the page exists.
The Actor is running slowly or getting blocked.
Increase the requestDelayMs value in the advanced options. A delay of 1000 to 2000 milliseconds often resolves rate limiting without failing the run.
Some job titles return empty salary data.
PayScale may not have enough salary reports for that specific title in the chosen country. Try a broader title or switch to a different country code.
The category scrape stopped before collecting all jobs.
Check your maxItems setting. If it is lower than the number of jobs in the category, the Actor will stop early. Raise the limit and rerun.
I pasted a URL but the Actor ignored it.
The startUrl field is only used when the jobTitles array is empty. Clear the job titles list and leave the category unset, then the direct URL will take effect.
FAQ
| Question | Answer |
|---|---|
| Can I scrape multiple job titles in one run? | Yes. Add as many job titles as you need to the jobTitles array and the Actor will visit each one's salary page sequentially. |
| What countries are supported? | The country input accepts US, CA, GB, AU, IN, DE, FR, NL, and SG. The default is US if you leave it blank. |
| How do I scrape an entire job category? | Choose a category from the dropdown, such as Information Technology or Healthcare, and the Actor will collect salary data for every job title listed in that category. |
| Can I scrape a specific PayScale URL? | Yes. Paste the full research path into the startUrl field, for example /research/US/Job=Software_Engineer/Salary, and the Actor will scrape only that page. |
| Does this Actor handle PayScale's pagination? | Yes. When browsing a category, the Actor follows pagination links to collect all available job titles up to your maxItems limit. |
| What data fields does the Actor return? | Each record includes the job title, base pay range, bonus and profit-sharing data, experience-level percentiles, common benefits, and the country and category context. |
| Is a PayScale account required? | No. The Actor reads the public research pages that PayScale makes available without a login. |
| Can I set a delay between requests? | Yes. Use the requestDelayMs option in the advanced settings to add a pause between batches if you encounter rate limiting. |
| What output formats are supported? | You can export your dataset in CSV, JSON, Excel, or XML from the Apify platform. |
| How many records can I collect per run? | You can set maxItems anywhere from 1 to 1,000,000. The Actor stops when it hits that number or runs out of pages to scrape. |
Related actors
Browse the full ParseForge collection for more scrapers.
๐ Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.
โ ๏ธ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by PayScale, Inc. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.
Input
| Field | Type | What it does | Default |
|---|---|---|---|
| jobTitles | array | List of job titles to look up salary data for. Example: ["Software Engineer", "Data Scientist", "Product Manager"]. If provided, startUrl is ignored. | ["Software Engineer","Data Scientist","R |
| category | string (29 options) | Browse an entire job category to get salary data for all jobs in it. If no job titles or start URL are provided, this category will be used. | Information-Technology |
| startUrl | string | PayScale research URL to scrape directly. Supports job URLs (e.g. /research/US/Job=Software_Engineer/Salary) and category URLs (e.g. /research/US/Job/Information-Technology). | not set |
| country | string | Country code to look up salaries for. Default: US. Supported: US, CA, GB, AU, IN, DE, FR, NL, SG. | US |
| maxItems | integer | How many salary records to collect per run. | 10 |
| requestDelayMs | integer | Milliseconds to wait between batches. Increase if the site rate-limits you. | 500 |
Pricing
from $8.00 per 1,000 results
| Charged for | What it is | Price each |
|---|---|---|
| result | Single result in the default dataset. | $0.008 to $0.0085 |
Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.
API
One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.
curl -X POST "https://api.apify.com/v2/acts/parseforge~payscale-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"helloWorld": 123
}' Examples
Input that runs as-is.
{
"helloWorld": 123
} Reviews
No reviews yet. Be the first.
Issues
We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.
Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.
