Discover/PeoplePerHour API
live

PeoplePerHour APIpeopleperhour.com

Access PeoplePerHour freelance job postings via API. Search by keyword, category, and sort order. Get full job details including skills, timestamps, and location type.

Endpoint health
verified 6d ago
list_jobs
get_job
2/2 passing latest checkself-healing
Endpoints
2
Updated
6d ago

What is the PeoplePerHour API?

The PeoplePerHour API provides two endpoints — list_jobs and get_job — to retrieve public freelance job postings from PeoplePerHour's job board. list_jobs returns paginated cards of up to 20 jobs per page, each carrying a title, description snippet, price display, and job URL. get_job resolves any of those URLs into a full posting with 9 structured fields including required skills, posting and expiry timestamps, employment type, location type, and applicant country restriction.

This call costs2 credits / call— charged only on success
Try it
1-based result page number; 20 jobs per page.
Ordering of results as offered by the site's sort dropdown.
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.
Job category or sub-category code from the site's category picker. Omitted = all categories.
api.parse.bot/scraper/0fe6f91d-921f-48a4-854b-3dd214680064/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
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'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace peopleperhour-com-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""Walkthrough: PeoplePerHour freelance jobs — browse, search, and drill into details."""
from parse_apis.peopleperhour_com_api import PeoplePerHour, Sort, Category, JobNotFound

client = PeoplePerHour()

# Browse the latest tech-programming jobs, capped at 5 total items.
for job in client.job_summaries.list(category=Category.TECHNOLOGY_PROGRAMMING, sort=Sort.LATEST, limit=5):
    print(job.title, job.price, job.proposals)

# Search by keyword and drill into the first match for full details.
hit = client.job_summaries.list(query="React Native", limit=1).first()
if hit is not None:
    try:
        detail = hit.details()
        print(detail.title)
        print(detail.description[:200])
        print("Skills:", detail.skills)
        print("Posted:", detail.date_posted, "Expires:", detail.valid_through)
        print("Location:", detail.location_type, "Country:", detail.applicant_country)
    except JobNotFound:
        print("Job", hit.job_id, "is no longer available")

print("exercised: job_summaries.list / details")
All endpoints · 2 totalmissing one? ·

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.

Input
ParamTypeDescription
pageinteger1-based result page number; 20 jobs per page.
sortstringOrdering of results as offered by the site's sort dropdown.
querystringFree-text keyword search over job postings (e.g. 'React Native'). Words are matched as the site's own search does; omitted = no keyword filter.
categorystringJob category or sub-category code from the site's category picker. Omitted = all categories.
Response
{
  "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

Browsing and Searching Jobs

The list_jobs endpoint accepts four optional parameters: page (1-based), sort for ordering results, query for free-text keyword search (e.g. 'React Native'), and category to scope results to a specific PeoplePerHour category or sub-category code. Each call returns up to 20 job cards alongside pagination metadata: total (total matching jobs), has_more, per_page, page, and last_page. This makes it straightforward to walk through all pages of results for a given search.

Job Detail Fields

Passing a job_url returned from list_jobs to get_job yields the complete posting. The response includes the full description text, skills as an array of strings, date_posted and valid_through as YYYY-MM-DD HH:MM:SS timestamps in site local time, employment_type and location_type using schema.org vocabulary (e.g. CONTRACTOR, TELECOMMUTE), and applicant_country which is either a country name string or null when the client has placed no geographic restriction on applicants.

Coverage and Scope

Both endpoints operate on publicly visible job postings. The list_jobs response reflects the same job cards a visitor sees when browsing the PeoplePerHour job board. Filtering combines keyword and category together, matching the site's own search behavior. The get_job endpoint does not require a separate lookup step — the job_url field from any list result is the direct input.

Reliability & maintenanceVerified

The PeoplePerHour API is a managed, monitored endpoint for peopleperhour.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when peopleperhour.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official peopleperhour.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Last verified
6d ago
Latest check
2/2 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Aggregate PeoplePerHour postings by category to track demand for specific freelance skill sets over time
  • Monitor new React Native or other keyword-matched jobs as they are posted using the sort=latest order
  • Extract the skills array from get_job to build a frequency map of in-demand technologies on the platform
  • Filter jobs by applicant_country field to surface location-restricted opportunities for a target market
  • Pipe date_posted and valid_through timestamps into a pipeline that flags postings nearing expiry
  • Cross-reference employment_type and location_type fields to identify remote contract work across categories
  • Build a job alert system that pages through list_jobs results and notifies users when matching titles appear
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 req/min

Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does PeoplePerHour have an official developer API?+
PeoplePerHour does not publish a public developer API for job listings. This Parse API surfaces the public job board data without requiring a PeoplePerHour developer account.
What does `list_jobs` return for each job card, and how do I filter results?+
list_jobs returns up to 20 job cards per page, each with a job_id, title, description snippet, price display value, and job_url. You can narrow results with the query parameter for keyword matching, the category parameter for a specific PeoplePerHour category code, and sort to control ordering. The response also includes total, has_more, last_page, and per_page for pagination.
What geographic and employment-type data is available in `get_job`?+
get_job returns location_type using schema.org vocabulary (e.g. TELECOMMUTE) and applicant_country, which is a country name string when the poster has restricted applications by geography, or null when unrestricted. employment_type uses schema.org values such as CONTRACTOR.
Does the API expose freelancer profiles, bids on a job, or hourly rates for freelancers?+
Not currently. The API covers job postings only — listing cards and individual job details. Freelancer profiles, bid counts, and freelancer hourly rates are not included. You can fork this API on Parse and revise it to add an endpoint targeting those data points.
How fresh is the job listing data, and is there a limit on how far back results go?+
Results reflect the publicly visible job board at the time of the request, ordered by the sort parameter. The valid_through timestamp on each full job record from get_job indicates the posting's expiry date. The API does not expose an archive of expired or closed postings — only active, publicly listed jobs are accessible.
Page content last updated . Spec covers 2 endpoints from peopleperhour.com.
Related APIs in JobsSee all →
upwork.com API
Access comprehensive details about Upwork job postings, including descriptions, budgets, required skills, client information, and engagement metrics to help you find and evaluate opportunities. Monitor job activity and client profiles to make informed decisions about which projects to pursue.
totaljobs.com API
Search and browse job listings from across the UK on TotalJobs, then access detailed information about specific positions including requirements, salary, and application details. Quickly compare opportunities and find roles that match your criteria.
hubmub.com API
Search and discover job opportunities on HubMub by filtering results based on your preferred search terms, job type, category, industry, and location. Retrieve detailed information about specific job listings to help you find the right position that matches your career goals.
fiverr.com API
Search Fiverr gigs by category with filters for budget, delivery time, and seller level, then view detailed information about any gig including package pricing, inclusions, seller credentials, and customer reviews. Find the perfect freelancer for your project by comparing options and reviewing comprehensive gig details in one place.
monster.com API
Search and retrieve job listings from Monster.com. Supports keyword and location-based search with structured results including job descriptions, salary ranges, company info, and employment details. Also provides access to popular job categories.
ph.jobstreet.com API
Search for jobs and explore detailed listings from JobStreet Philippines, including job descriptions, company profiles, and hiring information. Discover employment opportunities by browsing job classifications and viewing all open positions from specific companies.
serviceseeking.com.au API
Search and browse job postings and local service providers across Australia on ServiceSeeking.com.au. View detailed business profiles, ratings, pricing, and explore hundreds of service categories — from tradespeople to home services and beyond.
hellowork.com API
Search and browse job listings and company profiles on HelloWork, France's leading job board. Filter by keyword, location, contract type, salary, and more.