Discover/We Work Remotely API
live

We Work Remotely APIweworkremotely.com ↗

Search We Work Remotely job listings by keyword. Returns job title, company, location, headquarters, and description for every matching listing in one call.

Endpoint health
monitored
search_jobs
Checks pendingself-healing
Endpoints
1
Updated
1h ago

What is the We Work Remotely API?

The We Work Remotely API exposes 1 endpoint — search_jobs — that runs a keyword search against WWR's listings and returns the full results page as structured data. A single call yields up to the complete set of matching job cards, each with 5 fields including job title, company name, remote location tag, company headquarters, and a listing description. No pagination is needed; the source renders all matches on one page.

This call costs1 credit / call— charged only on success
Try it
Free-text search keyword or phrase matched against job listings (e.g. developer). Multi-word phrases are searched as typed.
→ api.parse.bot/scraper/de9becb7-22de-4201-9cea-ac5101a7aeb8/<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/de9becb7-22de-4201-9cea-ac5101a7aeb8/search_jobs?term=developer' \
  -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 weworkremotely-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: We Work Remotely job search — bounded, re-runnable."""
from parse_apis.weworkremotely_com_api import WeWorkRemotely, InputFormatInvalid

client = WeWorkRemotely()

# Search for remote developer jobs, cap at 5 results.
try:
    for job in client.jobs.search(term="developer", limit=5):
        print(job.job_title, "-", job.company_name, f"({job.location})")
        print("  Category:", job.category, "| Posted:", job.posted)
        print("  Tags:", ", ".join(job.tags))
        print("  URL:", job.job_url)
except InputFormatInvalid:
    print("Search term was rejected by the site.")

# Drill into the first result of a different search.
hit = client.jobs.search(term="human resources", limit=1).first()
if hit is not None:
    print("\nFirst HR listing:", hit.job_title)
    print("  Company:", hit.company_name, "| HQ:", hit.company_headquarters)
    print("  Snippet:", hit.description_snippet)
    print("  Slug:", hit.job_slug)

print("\nexercised: jobs.search")
All endpoints · 1 totalmissing one? ·

Runs a keyword search on We Work Remotely and returns every job listing card on the results page in one round trip (the site renders all matches on a single, category-grouped page with no pagination, so `count` is the full number of matching listings; sponsored ad cards are excluded). Each row is one job posting with its title, company, location (the listing's remote-region tag such as 'Anywhere in the World', falling back to the company headquarters when no region tag is shown), company_headquarters, a description_snippet built from the listing's tag line (job type, salary band, region — the site shows no prose summary on result cards), the full job_url, the job_slug identifier, the site category the listing was grouped under, the raw tags list, and the relative posted label (e.g. '12d' or 'New'). A keyword the site has no matches for returns an empty jobs array with count 0 and is a valid result. Empty term is rejected.

Input
ParamTypeDescription
termrequiredstringFree-text search keyword or phrase matched against job listings (e.g. developer). Multi-word phrases are searched as typed.
Response
{
  "type": "object",
  "fields": {
    "jobs": "array of job listing objects: job_title, company_name, location (remote region tag or headquarters), company_headquarters, description_snippet (tag line joined with ' · '), job_url (absolute), job_slug, category (site section the listing was grouped under), tags (array of strings), posted (relative age label)",
    "term": "string, the search keyword that was applied",
    "count": "integer, number of listings returned (all matches; the page is not paginated)"
  },
  "sample": {
    "data": {
      "jobs": [
        {
          "tags": [
            "Contract",
            "$100,000 or more USD",
            "Anywhere in the World"
          ],
          "posted": "12d",
          "job_url": "https://weworkremotely.com/remote-jobs/sanctuary-computer-senior-shopify-developer",
          "category": "Design Jobs",
          "job_slug": "sanctuary-computer-senior-shopify-developer",
          "location": "Anywhere in the World",
          "job_title": "Senior Shopify Developer",
          "company_name": "Sanctuary Computer",
          "description_snippet": "Contract · $100,000 or more USD · Anywhere in the World",
          "company_headquarters": "New York City"
        }
      ],
      "term": "developer",
      "count": 25
    },
    "status": "success"
  }
}

About the We Work Remotely API

What the API returns

The search_jobs endpoint accepts a single term parameter — a free-text keyword or phrase — and returns an array of job listing objects alongside the original term string and a count integer representing the total number of matched listings. Each object in the jobs array includes job_title, company_name, location (the remote region tag or company headquarters region as displayed on WWR), company_headquarters, and description.

Search behavior and pagination

We Work Remotely groups results by category on a single, non-paginated results page. The API reflects this exactly: count is the full number of matching listings, and the jobs array is complete in one round trip. Multi-word phrases passed to term are matched the same way the site's own search handles them. Sponsored ad cards are excluded from results.

Coverage scope

The API covers the public job listing cards visible on WWR search results — remote-first roles across engineering, design, marketing, customer support, sales, and other categories the site features. Fields are limited to what appears on the listing card level; full job description bodies, application URLs, and posting dates are not included in the current response shape.

Reliability & maintenance

The We Work Remotely API is a managed, monitored endpoint for weworkremotely.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when weworkremotely.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 weworkremotely.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.

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 remote job listings by role keyword (e.g., 'python developer') into an internal talent-tracking dashboard
  • Monitor when new companies appear in WWR search results for a specific skill or tool
  • Build a niche job board that filters WWR listings by location tag or company headquarters region
  • Track how many remote listings exist for a given job category keyword over time
  • Cross-reference company_name and company_headquarters fields against a CRM to identify hiring activity at known accounts
  • Populate a Slack bot that surfaces fresh remote listings for a team's chosen keywords each morning
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 We Work Remotely have an official developer API?+
Yes. We Work Remotely publishes a public RSS feed per job category (documented at weworkremotely.com/remote-jobs.rss), but it does not offer a structured REST or JSON developer API. The Parse API provides structured JSON from keyword search results, which the RSS feed does not support.
What does the `location` field contain — is it always 'Worldwide'?+
Not always. The location field reflects the remote region tag attached to each listing, which can be a broad tag like 'Worldwide', a continent, a specific country, or a US time zone range depending on how the employer posted the role. It is distinct from company_headquarters, which reflects where the company is based.
Does the API return full job description text or application links?+
The current response includes a description field drawn from the listing card, which is typically a short summary rather than the full job post body. Application URLs and full posting details are not included in the response. You can fork this API on Parse and revise it to add an endpoint that fetches the individual listing page and returns the full description and application link.
Can I filter results by job category, date posted, or company size?+
The search_jobs endpoint filters solely by the term keyword. Category filtering, date-posted sorting, and company attributes are not exposed as parameters. You can fork this API on Parse and revise it to add category-scoped endpoints that target WWR's per-category listing pages.
How fresh are the results?+
Results reflect the listings visible on the We Work Remotely search results page at the time of the API call. There is no caching layer in the endpoint itself, so each call retrieves the current state of the results page. Listing freshness depends on how recently WWR publishers posted or updated their roles.
Page content last updated . Spec covers 1 endpoint from weworkremotely.com.
Related APIs in JobsSee all →
workingnomads.com API
Search and filter remote job listings from Working Nomads to find digital nomad-friendly positions tailored to your location, job category, and experience level. Discover opportunities across various remote roles and companies that actively hire location-independent workers.
dailyremote.com API
Search and browse remote job listings from DailyRemote.com with complete job details including descriptions, salary ranges, company information, and hiring process steps. Access structured job data and company contact details to find and evaluate remote opportunities all in one place.
remoteok.com API
Access data from remoteok.com.
peopleperhour.com API
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.
reqhunt.com API
Access data from reqhunt.com.
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.
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.
Workday Jobs API
Search and retrieve job postings and detailed descriptions from any company's Workday career site. Find open positions across all organizations using Workday's hiring platform and access complete job details in one place.