Peopleperhour APIpeopleperhour.com ↗
Browse thousands of freelance job postings on PeoplePerHour by category and keyword, then dive into detailed information about specific opportunities that match your skills. Search and sort through listings to quickly find your next project without leaving one platform.
curl -X GET 'https://api.parse.bot/scraper/0fe6f91d-921f-48a4-854b-3dd214680064/list_jobs?sort=latest&category=technology-programming' \ -H 'X-API-Key: $PARSE_API_KEY'
Returns one page (20 job cards) of public freelance job postings from PeoplePerHour's job board, optionally restricted to a category, filtered by a keyword search and ordered by a sort option (default: latest first). Each record is one job card as shown on the listing page: title, snippet description, displayed price (fixed budget such as $67 or hourly such as $50/hr), buyer name/profile link, relative posting age, proposal count, location label, expiry label when the site shows one, and promotional tags (e.g. 'opportunity', 'urgent'). One round trip per call. Pagination is caller-controlled via `page` (1-based; omitted = page 1); `total` and `last_page` come from the site, `has_more` is derived from total and the 20-per-page size. A keyword with no matches returns an empty `jobs` array with total 0. Each job's `job_url` can be passed unchanged to get_job.
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based result page number; 20 jobs per page. |
| sort | string | Ordering of results as offered by the site's sort dropdown. |
| query | string | Free-text keyword search over job postings (e.g. 'React Native'). Words are matched as the site's own search does; omitted = no keyword filter. |
| category | string | Job category or sub-category code from the site's category picker. Omitted = all categories. |
{
"type": "object",
"fields": {
"jobs": "array of job cards; each has job_id (numeric string), title, job_url (input for get_job), description (snippet text), price (display string, fixed or /hr), buyer_name, buyer_url, posted (relative age text), proposals (integer or null), location (label such as Remote, or null), expires (label when shown, else null), tags (array of promo labels)",
"page": "integer page returned",
"total": "integer total number of matching jobs reported by the site",
"has_more": "boolean, true when further pages exist",
"per_page": "integer page size (20)",
"last_page": "integer highest page number linked from this page"
},
"sample": {
"data": {
"jobs": [
{
"tags": [],
"price": "$67",
"title": "Squarespace editor freeze + navigation flash",
"job_id": "4519410",
"posted": "an hour ago",
"expires": null,
"job_url": "https://www.peopleperhour.com/freelance-jobs/technology-programming/programming-coding/squarespace-editor-freeze-navigation-flash-4519410",
"location": "Remote",
"buyer_url": "https://www.peopleperhour.com/freelancer/peter-xxxx",
"proposals": 21,
"buyer_name": "Peter A.",
"description": "Issue: The Squarespace page editor freezes/becomes unresponsive when editing site pages..."
}
],
"page": 1,
"total": 142,
"has_more": true,
"per_page": 20,
"last_page": 8
},
"status": "success"
}
}About the Peopleperhour API
The Peopleperhour API on Parse exposes 2 endpoints for the publicly available data on peopleperhour.com. Calls return JSON over HTTPS and are billed per successful response.
Pin a release with the API-Snapshot-Version header so canonical updates don't silently change your contract.