PeoplePerHour Jobs Scraper avatar

PeoplePerHour Jobs Scraper

Pricing

Pay per event

Go to Apify Store
PeoplePerHour Jobs Scraper

PeoplePerHour Jobs Scraper

Scrape public PeoplePerHour freelance jobs with budgets, client signals, proposal counts, categories, posted times, and listing URLs.

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

2 days ago

Last modified

Categories

Share

Find fresh freelance project leads from PeoplePerHour and export them to a clean dataset.

What does PeoplePerHour Jobs Scraper do?

PeoplePerHour Jobs Scraper collects public freelance job and project listings from PeoplePerHour.

It visits PeoplePerHour /freelance-jobs pages, category pages, and filtered URLs you provide.

It extracts job titles, URLs, budgets, descriptions, proposal counts, posted-time text, client signals, and category information.

Use it to monitor new project opportunities without manually refreshing PeoplePerHour search pages.

Who is it for?

Freelancers use it to discover new projects in their niche.

Agencies use it to feed outbound sales and proposal workflows.

Lead generation teams use it to collect companies and client intent signals.

Market researchers use it to track demand, budgets, and category trends.

Recruiting and staffing teams use it to understand what skills are being requested.

Why use this scraper?

PeoplePerHour listings change quickly.

Manual monitoring is slow and easy to miss.

This actor gives you structured rows that can be filtered, exported, enriched, or sent to your CRM.

It also includes source URLs and timestamps, so your team can audit where each lead came from.

What data can I extract?

FieldDescription
titleJob or project title
urlDirect PeoplePerHour listing URL
jobIdNumeric listing ID parsed from the URL
sourceUrlCategory/search URL where the listing was found
categoryMain category parsed from the listing URL
subcategorySubcategory parsed from the listing URL
budgetVisible budget/rate text
currencyCurrency symbol when visible
budgetAmountNumeric budget amount when visible
postedAtTextVisible posted-time text
locationLocation/remote signal when visible
isRemoteBoolean remote indicator when visible
descriptionListing snippet/description
clientNameVisible client name on the card
clientProfileUrlClient profile URL when visible
proposalCountVisible number of proposals
scrapedAtISO timestamp of extraction

How much does it cost to scrape PeoplePerHour jobs?

The actor uses pay-per-event pricing.

Each run has a fixed start charge of $0.005.

Each saved PeoplePerHour job is charged as an item event.

Apify plan tierPrice per saved jobExample: 100 jobsExample: 1,000 jobs
FREE$0.00011498$0.0165 including start$0.1200 including start
BRONZE$0.000099982$0.0150 including start$0.1050 including start
SILVER$0.000077986$0.0128 including start$0.0830 including start
GOLD$0.000059989$0.0110 including start$0.0650 including start
PLATINUM$0.000039993$0.0090 including start$0.0450 including start
DIAMOND$0.000027995$0.0078 including start$0.0330 including start

On the Apify Free plan, a typical 50-job monitoring run costs about $0.0108.

That means roughly 460 similar 50-job runs fit within a $5 monthly platform credit before other Apify usage.

Use a small maxItems value for your first run.

Increase maxItems after you confirm the category and filters match your workflow.

How to scrape PeoplePerHour jobs

  1. Open the actor on Apify.
  2. Add one or more PeoplePerHour /freelance-jobs URLs.
  3. Optionally add category slugs such as technology-programming or design.
  4. Set maxItems to the number of jobs you need.
  5. Choose how many pages to visit per URL.
  6. Run the actor.
  7. Export results as JSON, CSV, Excel, XML, or via API.

Input options

startUrls accepts PeoplePerHour job listing pages.

categorySlugs builds PeoplePerHour category URLs for you.

keywords filters visible listing titles and descriptions after pages load.

maxItems controls the maximum number of rows saved.

maxPagesPerUrl controls pagination depth per start URL.

sortBy can request popularity, latest, ending soon, or budget sorting.

postedWithin filters by visible posted-time text.

useProxy enables Apify Proxy if the target starts returning challenges.

Example input

{
"startUrls": [
{ "url": "https://www.peopleperhour.com/freelance-jobs/technology-programming" }
],
"keywords": ["wordpress", "seo"],
"maxItems": 50,
"maxPagesPerUrl": 3,
"postedWithin": "any",
"sortBy": "latest",
"useProxy": false
}

Example output

{
"title": "Add user registration to Wordpress blog",
"url": "https://www.peopleperhour.com/freelance-jobs/technology-programming/website-development/add-user-registration-to-wordpress-blog-4507852",
"jobId": "4507852",
"category": "technology programming",
"subcategory": "website development",
"budget": "€23",
"currency": "€",
"budgetAmount": 23,
"postedAtText": "6 hours ago",
"description": "Add user registration for ReplyResearch.com...",
"clientName": "Jonathan F.",
"proposalCount": 18,
"scrapedAt": "2026-07-08T02:14:33.782Z"
}

Tips for better results

Start with specific category pages.

Use keywords to reduce noise for broad categories.

Use sortBy: latest when monitoring fresh leads.

Use higher maxPagesPerUrl for broad lead collection.

Keep the first run small to confirm the data shape.

Enable proxy only if PeoplePerHour returns challenge pages or empty results.

Supported PeoplePerHour pages

The actor supports public PeoplePerHour URLs under /freelance-jobs.

Examples include:

  • https://www.peopleperhour.com/freelance-jobs
  • https://www.peopleperhour.com/freelance-jobs/technology-programming
  • https://www.peopleperhour.com/freelance-jobs/design
  • https://www.peopleperhour.com/freelance-jobs/digital-marketing

Integrations

Send new PeoplePerHour leads to Google Sheets.

Push matching jobs to Airtable.

Trigger Slack alerts when a high-budget job appears.

Enrich client profiles in a downstream workflow.

Feed jobs into a CRM for proposal tracking.

Combine the dataset with Apify webhooks for scheduled monitoring.

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/peopleperhour-jobs-scraper').call({
startUrls: [{ url: 'https://www.peopleperhour.com/freelance-jobs/technology-programming' }],
maxItems: 50,
maxPagesPerUrl: 3,
});
console.log(run.defaultDatasetId);

API usage with Python

from apify_client import ApifyClient
client = ApifyClient('MY-APIFY-TOKEN')
run = client.actor('automation-lab/peopleperhour-jobs-scraper').call(run_input={
'startUrls': [{'url': 'https://www.peopleperhour.com/freelance-jobs/design'}],
'maxItems': 50,
'maxPagesPerUrl': 3,
})
print(run['defaultDatasetId'])

API usage with cURL

curl -X POST 'https://api.apify.com/v2/acts/automation-lab~peopleperhour-jobs-scraper/runs?token=MY-APIFY-TOKEN' \
-H 'Content-Type: application/json' \
-d '{"startUrls":[{"url":"https://www.peopleperhour.com/freelance-jobs/digital-marketing"}],"maxItems":50}'

MCP usage

Use this actor from MCP-compatible tools through Apify MCP Server.

MCP endpoint URL:

https://mcp.apify.com/?tools=automation-lab/peopleperhour-jobs-scraper

Add it in Claude Code with HTTP transport:

$claude mcp add apify-peopleperhour-jobs --transport http https://mcp.apify.com/?tools=automation-lab/peopleperhour-jobs-scraper

For Claude Desktop, Cursor, or VS Code MCP settings, add an HTTP MCP server entry and include your Apify API token in the authorization header.

Example MCP JSON config for Claude Desktop, Cursor, or VS Code:

{
"mcpServers": {
"apify-peopleperhour-jobs": {
"type": "http",
"url": "https://mcp.apify.com/?tools=automation-lab/peopleperhour-jobs-scraper",
"headers": {
"Authorization": "Bearer YOUR_APIFY_TOKEN"
}
}
}
}

In Claude Desktop, open Settings → Developer → Edit Config, paste the JSON block, save, and restart Claude Desktop.

In Cursor, open Settings → MCP, add a new server, choose HTTP transport, paste the same URL, and set the Authorization header.

In VS Code with an MCP extension, create a new HTTP server configuration using the same name, URL, and bearer-token header.

Example prompts:

  • "Scrape the latest PeoplePerHour technology projects and show high-budget WordPress jobs."
  • "Monitor PeoplePerHour design jobs and export logo projects to CSV."
  • "Find new PeoplePerHour SEO projects posted in the last day."

Scheduling

Run the actor hourly or daily to monitor new opportunities.

Use postedWithin and sortBy: latest for recurring jobs.

Set a small enough maxItems to avoid collecting old listings repeatedly.

Proxy and anti-blocking

PeoplePerHour may return challenge pages to simple HTTP clients.

This actor uses Playwright so public listings can load like a browser.

Proxy is optional and disabled by default.

If runs begin returning no data, enable Apify Proxy in the input.

Residential proxy can help with stricter challenge pages, but it costs more.

Data quality notes

PeoplePerHour can change CSS class names.

The actor uses resilient selectors around listing links and visible card text.

Some fields are optional because PeoplePerHour may not show them on every listing card.

Always keep url, title, sourceUrl, and scrapedAt as your stable keys.

Legality

This actor extracts publicly visible PeoplePerHour listing information.

You are responsible for using the data according to applicable laws, platform terms, and privacy requirements.

Do not use scraped data for spam or abusive outreach.

Respect opt-outs and local marketing regulations.

Troubleshooting

If you get zero items, check that your URL starts with /freelance-jobs.

If keyword filters are too narrow, remove them and rerun a small test.

If PeoplePerHour returns challenge pages, enable useProxy.

If a category has fewer jobs than expected, increase maxPagesPerUrl or use the main jobs URL.

FAQ

Can I scrape freelancer profiles too?

This actor focuses on job/project listings. Freelancer profiles are a different entity type and are not included in the MVP.

Can I monitor only new jobs?

Yes. Use sortBy: latest, set postedWithin, and schedule the actor.

Does it require a PeoplePerHour account?

No. It uses public listing pages and does not log in.

Can I use it for lead generation?

Yes. The output is designed for freelancers, agencies, and sales teams looking for project leads.

Changelog

Initial version extracts public PeoplePerHour job listings, budgets, client signals, proposal counts, categories, descriptions, and timestamps.