The PeoplePerHour Job Scraper collects freelance job listings from PeoplePerHour based on targeted keyword searches. It helps professionals stay updated on new opportunities, analyze market demand, and turn raw job data into actionable insights.
Created by Bitbash, built to showcase our approach to Scraping and Automation!
If you are looking for peopleperhour-job-scraper you've just found your team — Let’s Chat. 👆👆
This project automatically gathers freelance project listings by keyword and structures them into clean, reusable data. It solves the problem of manually tracking new job posts and filtering relevant opportunities. It is built for freelancers, agencies, analysts, and researchers who need reliable job-market visibility.
- Searches jobs using one or multiple skill-based keywords.
- Captures detailed project, budget, and client information.
- Produces structured data ready for analysis or automation.
- Designed for repeated runs without manual effort.
- Suitable for monitoring trends across different skills.
| Feature | Description |
|---|---|
| Keyword-Based Search | Finds freelance jobs using skill or role keywords. |
| Detailed Job Extraction | Collects budget, description, category, and client data. |
| Location Awareness | Identifies remote and location-specific projects. |
| Scalable Collection | Supports configurable limits for large job scans. |
| Automation Ready | Outputs clean JSON suitable for pipelines and dashboards. |
| Field Name | Field Description |
|---|---|
| project_id | Unique identifier of the job post. |
| title | Project title as listed. |
| url | Direct link to the job listing. |
| description | Full project description text. |
| budget | Original project budget amount. |
| budget_converted | Budget converted to a standard currency. |
| currency | Original currency of the budget. |
| project_type | Fixed-price or hourly project type. |
| category | Main job category. |
| sub_category | Specific subcategory of the job. |
| posted_date | Date and time when the job was posted. |
| expiry_date | Job application expiry date. |
| location_type | Indicates remote or location-based work. |
| proposal_count | Number of proposals submitted. |
| client_name | Name of the client posting the job. |
| client_country | Client’s country. |
| query | Keyword used to find the job. |
[
{
"project_id": 4382192,
"title": "Wordpress website down",
"url": "https://www.peopleperhour.com/freelance-jobs/technology-programming/website-development/wordpress-website-down-4382192",
"description": "Hi\n\nThere is a website I need to view online...",
"budget": 20,
"budget_converted": 26.96,
"currency": "GBP",
"project_type": "fixed_price",
"category": "Technology & Programming",
"sub_category": "Website Development",
"posted_date": "2025-05-24 14:09:45",
"expiry_date": "2025-06-23 14:09:45",
"location_type": "remote",
"proposal_count": 21,
"client_name": "James C.",
"client_country": "United Kingdom",
"query": "Wordpress"
}
]
PeoplePerHour Job Scraper/
├── src/
│ ├── main.py
│ ├── collectors/
│ │ ├── search_runner.py
│ │ └── job_parser.py
│ ├── models/
│ │ └── job_schema.py
│ ├── utils/
│ │ └── date_helpers.py
│ └── config/
│ └── settings.example.json
├── data/
│ ├── sample_input.json
│ └── sample_output.json
├── requirements.txt
└── README.md
- Freelancers use it to track new jobs, so they can apply faster to relevant projects.
- Agencies use it to monitor demand, so they can align services with market needs.
- Market analysts use it to study pricing trends, so they can generate insights.
- Lead generators use it to identify clients, so they can build outreach pipelines.
- Researchers use it to analyze skills demand, so they can publish market reports.
How do I control how many jobs are collected? You can configure a maximum item limit, allowing you to balance between speed and data volume.
Can I search for multiple skills at once? Yes, multiple keywords can be provided, and each result includes the keyword used.
Is the data suitable for spreadsheets or databases? The output is structured JSON, making it easy to import into spreadsheets, databases, or dashboards.
Does it support repeated runs without duplicates? Each job includes a unique project ID, making deduplication straightforward.
Primary Metric: Processes up to 30 job listings per keyword in under one minute on average.
Reliability Metric: Maintains a consistent success rate above 98% across repeated runs.
Efficiency Metric: Uses lightweight requests to minimize bandwidth and processing overhead.
Quality Metric: Captures complete job records with accurate budgets, dates, and client details.
