PeoplePerHour Scraper
Pricing
from $3.00 / 1,000 results
PeoplePerHour Scraper
[💰 $3.00 / 1K] Extract freelance project and job postings from PeoplePerHour. Search by keyword, browse a category, or paste URLs, then filter by price type, experience level, and remote work. Get titles, budgets, currencies, categories, skills, posting dates, proposal counts, and client details.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
SolidCode
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Pull live freelance project and job postings from PeoplePerHour at scale — titles, budgets in native currency, fixed vs hourly pricing, required skills, proposal counts, posting and expiry dates, and the hiring client's name and country. Built for agencies, lead-generation teams, and market researchers who need fresh freelance-demand data without manually clicking through marketplace listings page by page.
Why This Scraper?
- 10 top-level categories, browseable by name — Technology & Programming · Design · Business · Marketing, Branding & Sales · Digital Marketing · Writing & Translation · Video, Photo & Image · AI Services · Social Media · Music & Audio. Pick one from a dropdown, and every result comes back labelled with that exact name, so your filters and pivot tables line up.
- Per-project native currency — GBP, USD, or EUR — every budget keeps the currency the client actually posted in, not a converted home-IP estimate that distorts your pricing analysis.
- Budget figures tagged with their pricing model —
budgetis the exact amount PeoplePerHour prints on the project, andpriceTypesays whether that number is a whole-project fixed price or a per-hour rate, so a £30/hr contract never gets averaged in as a £30 job. - Fixed vs Per-hour pricing filter — limit a run to fixed-price projects or hourly contracts to match exactly the work model you sell.
- Entry / Intermediate / Expert experience filter — target only the seniority tier you compete in and skip the rest.
- Proposal (bid) counts on every project —
proposalCounttells you how saturated each lead is before you spend time on a pitch. - Full project brief on every row, plus the client's required-skills list — every row carries the complete project description exactly as the client wrote it, line breaks intact, not a truncated teaser. Switch on full descriptions and each row also gets the skills the client asked for: typically 6 tags per project, up to 23.
- Hiring-client details on every row — client name and country, so you know who is posting and where they're based.
- Deduplicated by project ID — each project is returned once even when it surfaces across several keywords or pages, so your lead list has no repeats.
Use Cases
Lead Generation for Agencies & Freelancers
- Build a daily feed of open projects matching your service keywords
- Prioritise leads by proposal count to find low-competition projects
- Filter to Expert-level briefs that match premium service offerings
- Pull client name and country to qualify and personalise outreach
Market & Demand Research
- Measure how many projects are posted per category over time
- Track which skills clients are requesting most across a category
- Spot emerging demand in the dedicated AI Services category
- Map remote-only versus on-site demand for a given skill set
Competitive Pricing Intelligence
- Benchmark fixed-price budgets against hourly rates in your niche
- Compare native-currency budgets (GBP/USD/EUR) across regions
- Track budgets by experience tier (Entry / Intermediate / Expert) to position your quotes
- Identify under-priced versus premium project segments
Talent Sourcing & Recruiting
- Find the categories and skills with the highest open-project volume
- Gauge market rates before posting your own briefs
- Monitor client countries to understand where work originates
- Track posting and expiry dates to time outreach around fresh demand
Getting Started
Simple Keyword Search
Search a single keyword and collect the latest matching projects:
{"searchQueries": ["wordpress"],"maxResults": 100}
Browse a Category
Collect every open project in one category, sorted by most recent:
{"category": "design","sortBy": "recent","maxResults": 200}
Full Filtered Run
Combine a keyword with pricing, experience, and remote filters:
{"searchQueries": ["logo design", "brand identity"],"category": "design","priceType": "fixed","experienceLevel": "expert","remoteOnly": true,"sortBy": "recent","maxResults": 0,"includeDescription": true}
Using PeoplePerHour URLs
Paste freelance-jobs URLs to scrape them exactly as shown on the site, including any filters baked into the link:
{"startUrls": ["https://www.peopleperhour.com/freelance-jobs/technology-programming","https://www.peopleperhour.com/freelance-jobs/design"],"maxResults": 150}
Input Reference
Search & Targeting
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQueries | string[] | ["wordpress"] | Keywords or phrases to search for, such as "wordpress", "logo design", or "data entry". Each keyword runs its own search. Up to 50 keywords per run. Leave empty to use the category or collect the broadest project feed. |
category | select | Any category | Browse a single category: Technology & Programming · Design · Business · Marketing, Branding & Sales · Digital Marketing · Writing & Translation · Video, Photo & Image · AI Services · Social Media · Music & Audio. The category field on every result carries the same name you picked here. |
startUrls | string[] | [] | Paste full PeoplePerHour freelance-jobs URLs (a category page or a filtered search page) to scrape them exactly as shown. Filters baked into the URL are respected. Up to 50 URLs per run. |
Filters & Limits
| Parameter | Type | Default | Description |
|---|---|---|---|
priceType | select | Any price type | Limit results to one pricing model: Fixed price or Per hour. |
experienceLevel | select | Any experience level | Only return projects asking for this seniority: Entry, Intermediate, or Expert. |
remoteOnly | boolean | false | Only return openly remote projects. PeoplePerHour's own remote filter leaves out country-restricted remote work, so leave this off if you want those too. |
sortBy | select | Most recent | Order results by Most recent (newest postings first) or Most relevant (best match to your search). |
maxResults | integer | 100 | Maximum projects to collect per keyword, category, or start URL. Set to 0 to collect everything available. |
Output Options
| Parameter | Type | Default | Description |
|---|---|---|---|
onlyUniqueProjects | boolean | true | Return each project once even if it appears across several pages or searches. Deduplicates by project ID. |
includeDescription | boolean | true | Add the client's required-skills tags to every project. Turn off for lighter, faster records when you only need titles, budgets, categories, dates, and links — the full project description is always included either way. |
Output
Each project posting is returned as one flat row. Here is a representative result with full descriptions enabled:
{"projectId": "4239871","title": "Build a custom WordPress plugin for booking management","url": "https://www.peopleperhour.com/freelance-jobs/technology-programming/wordpress/build-a-custom-wordpress-plugin-4239871","description": "We need an experienced WordPress developer to build a booking management plugin with calendar sync, payment capture, and an admin dashboard...","budget": 800,"currency": "GBP","priceType": "fixed","category": "Technology & Programming","subCategory": "WordPress","skills": ["WordPress", "PHP", "Plugin Development", "JavaScript"],"postedDate": "2026-06-18T09:14:22","postedRelative": "1 day ago","expiryDate": "2026-07-18T09:14:22","duration": "1 to 3 months","locationType": "Remote","experienceLevel": "Expert","proposalCount": 7,"isUrgent": false,"isFeatured": false,"isOpportunity": true,"isPreFunded": false,"clientName": "Sarah M.","clientCountry": "United Kingdom","clientUrl": "https://www.peopleperhour.com/freelancer/sarah-m","searchQuery": "wordpress","scrapedAt": "2026-06-19T12:00:00Z"}
Core Fields
| Field | Type | Description |
|---|---|---|
projectId | string | Unique PeoplePerHour project identifier (used for deduplication) |
title | string | Project title as posted by the client |
url | string | Direct link to the project page |
description | string | Full project brief exactly as the client posted it, with line breaks preserved |
Budget & Pricing
| Field | Type | Description |
|---|---|---|
budget | number | The single budget figure PeoplePerHour shows on the project. Read it together with priceType: a whole-project total when priceType is fixed, a per-hour rate when it is hourly. PeoplePerHour projects carry one budget figure, not a range. |
currency | string | Native currency the client posted in (GBP, USD, EUR) |
priceType | string | Pricing model: fixed or hourly |
Classification
| Field | Type | Description |
|---|---|---|
category | string | Top-level category name, exactly as it appears in the Category dropdown — one of the 10 PeoplePerHour categories |
subCategory | string | Sub-category name when present |
skills | string[] | Required skills tags the client listed for the project (included when full descriptions are enabled) |
experienceLevel | string | Seniority tier — Entry, Intermediate, or Expert — inferred from the project's budget tier |
locationType | string | Remote, Remote (country-restricted), or On-site. Country-restricted projects are remote work the client wants done from one named country. |
duration | string | Estimated project duration when provided |
Client & Status
| Field | Type | Description |
|---|---|---|
clientName | string | Public name of the hiring client |
clientCountry | string | Country the client is based in |
clientUrl | string | Link to the client's profile |
proposalCount | number | Number of bids the project has received |
isUrgent | boolean | The client marked the project urgent (about 1.5% of open projects) |
isFeatured | boolean | PeoplePerHour is promoting the project with its Featured badge. Genuinely rare: roughly 1 open project in 400 |
isOpportunity | boolean | PeoplePerHour's High Earning Potential badge: its model predicts this project and any follow-on work will generate high value income. Around 30% of open projects |
isPreFunded | boolean | The client has already funded the project before hiring, so the money is committed up front (about 2% of open projects) |
Meta
| Field | Type | Description |
|---|---|---|
postedDate | string | When the project was posted (ISO-style timestamp) |
expiryDate | string | When the project listing expires |
postedRelative | string | How long ago it was posted, in plain words (5 hours ago, 3 days ago) |
searchQuery | string | The keyword that surfaced this project |
scrapedAt | string | ISO timestamp of data collection |
Tips for Best Results
- Leave
maxResultsat 0 to capture an entire category's open demand — perfect for a full snapshot of what clients are hiring for right now in your niche. - Use Most recent sort for outreach — fresh postings are where new leads live; the most recent projects have the fewest existing proposals.
- Stack
isOpportunityandisPreFundedto rank leads —isOpportunityis PeoplePerHour's own High Earning Potential prediction (about 30% of open projects) andisPreFundedmeans the client has already put the money up (about 2%). A project carrying both is the strongest buy-signal in the feed.isFeaturedis a much rarer promotion badge, roughly 1 project in 400, so treat it as a curiosity rather than a filter. - Watch
proposalCountto find low-competition leads — a project with 0-3 proposals is far easier to win than one with 30, so sort your output by this field before pitching. - Turn off descriptions for fast volume runs — when you only need titles, budgets, categories, and links for market sizing, switching off full descriptions makes runs lighter and quicker.
- Combine a keyword with a category to tighten results to exactly the segment you serve, instead of scanning a broad keyword across every category.
- Split
fixedfromhourlybefore you average any budget —budgetis a whole-project total on fixed-price postings and a per-hour rate on hourly ones, so group bypriceTypefirst, then compare within each group and within each currency (every budget keeps its original GBP/USD/EUR, so there is no conversion drift to undo). - Run several keywords in one job — list every service variant you offer in
searchQueries; deduplication keeps the merged lead list clean.
Pricing
From $3.00 per 1,000 results — undercuts comparable PeoplePerHour data tools while returning native-currency budgets, skills, proposal counts, and client details. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.
| Results | No discount | Bronze | Silver | Gold |
|---|---|---|---|---|
| 100 | $0.36 | $0.34 | $0.32 | $0.30 |
| 1,000 | $3.60 | $3.40 | $3.20 | $3.00 |
| 10,000 | $36.00 | $34.00 | $32.00 | $30.00 |
| 100,000 | $360.00 | $340.00 | $320.00 | $300.00 |
A "result" is any project row in the output dataset. There are no compute or time-based charges — you pay per result, plus a small fixed per-run start fee.
Integrations
Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:
- Zapier / Make / n8n — Workflow automation
- Google Sheets — Direct spreadsheet export
- Slack / Email — Notifications on new results
- Webhooks — Trigger custom APIs on run completion
- Apify API — Full programmatic access
Legal & Ethical Use
This actor is designed for legitimate market research, lead generation, and competitive analysis of publicly listed freelance projects. Users are responsible for complying with applicable laws and PeoplePerHour's Terms of Service. Do not use extracted data for spam, harassment, or any unlawful purpose, and handle any personal data in line with relevant privacy regulations.