# Real-Time Monster Data - Monster Job Search, Job Details & Company Job Listings > Fast and Reliable Job Searches, Full Job Details, Company Job Listings, Titles, Employers, Locations, Descriptions, Salaries, Skills, and More on Monster/CareerBuilder in Real-Time. ## Overview Real-Time Monster Data is a fast and reliable API for job postings from Monster's own jobs service, fetched live at request time. It returns structured JSON via REST. Who is this API for: developers building job boards and aggregators, recruiting and talent-intelligence tools, hiring-trend analytics, and compensation research. What it returns: keyword job search with server-side filters for location and radius, country, date posted and employment type; full job details for up to 20 job ids per request; and every job Monster carries for a named employer. Each job carries the title, employer name, location with latitude and longitude, the full description, the apply link and apply type, normalized skills, an O*NET occupational code, the posting date, and a status and valid-through date, plus salary figures, employment type, benefits and an employer branding block wherever Monster states them. A search row already carries the whole job, so the description, salary, coordinates and apply link all arrive on the search response. Need help integrating? Contact support@openwebninja.com. For high volume / large scale plans, please contact support@openwebninja.com. ## Endpoints ### GET /search - Search Jobs Search Monster job postings by keyword, with the filters Monster honors server-side: `location` with a kilometre `radius`, `country`, `date_posted` and `employment_types`. Parameters: - **query** (string, required, e.g. `software engineer`): Free-form job search query, for example `software engineer` or `registered nurse`. Required: Monster returns nothing for a search with no query, no location and no company. Exactly one `query` is accepted; a second one is a 400. - location (string): Free-text location, for example `New York, NY` or `London`. Optional: omit it and the search runs country-wide over `country`, which returns far more inventory than any one city. Required if you pass `radius`. - page (integer, default: `1`): 1-based page to start from. Each page is 10 jobs. Capped at 51 by Monster's upstream offset ceiling of 500, and `page` + `num_pages` may not cross it either. **Default:** `1` **Allowed values:** `1-51` - num_pages (integer, default: `1`): How many consecutive pages to fetch and concatenate, starting at `page`. Each page is 10 jobs and one billed request. A value above 20 returns a 400 error. **Default:** `1` **Allowed values:** `1-20` - country (string, default: `us`): 2-letter country code. Selects both the Monster locale the search runs on and the market searched, and both matter: a country's own locale returned 1.35x to 6.9x the inventory `en-US` did. See Coverage for the markets Monster actually carries. **Default:** `us` - language (string): The language your `query` text is written in, as an `xx-xx` code such as `en-us` or `fr-fr`. It picks Monster's keyword analyser, so the postings come back in whatever language Monster published them. Omitted, Monster derives it from `country`. A malformed code is a 400. - sort_by (string, default: `relevance`, allowed: relevance | date): `relevance` leaves Monster's own ordering alone. `date` sorts the jobs in THIS response newest-first, applied locally because Monster ignores its own `orderBy`. Pair it with `date_posted` for real freshness control. **Default:** `relevance` **Allowed values:** `relevance`, `date` - date_posted (string, default: `all`, allowed: all | today | 3days | week | month): Only return jobs posted within this window, applied by Monster server-side with no downgrade. Monster filters on its own refresh date, so a returned job's `job_posted_at` can be older than the window. `all` sends no filter. **Default:** `all` **Allowed values:** `all`, `today`, `3days`, `week`, `month` - employment_types (string, allowed: FULLTIME | PARTTIME | CONTRACTOR | INTERN): Comma-separated employment types. Applied by Monster server-side, and OR-ed: a job matching any listed type is returned. An unrecognised value is a 400, because Monster itself rejects one. **Allowed values:** `FULLTIME`, `PARTTIME`, `CONTRACTOR`, `INTERN` - remote_jobs_only (boolean, default: `false`): Return only remote jobs. On its own this is a real Monster filter. Combined with `employment_types` it becomes a local filter, because Monster ORs the two upstream: it then under-returns, keeping only jobs Monster explicitly marks remote, and costs extra billed pages. **Default:** `false` - radius (integer): Search radius around `location`, in KILOMETRES, converted to the miles Monster expects. Requires `location`; Monster ignores a radius on a country-wide search, so that combination is a 400. Past the maximum Monster returns nothing, so an out-of-range value is also a 400. **Allowed values:** `1-160` - fields (string): Comma-separated projection over the job object, for example `job_title,employer_name,job_apply_link`. `job_id` and `job_title` are always included. An unknown field name is a 400. Full URL: `https://api.openwebninja.com/realtime-monster-data/search` ### GET /job-details - Job Details Full detail for up to 20 Monster job postings in one call, fetched concurrently and bounded to 10 in flight. Parameters: - **job_id** (string, required, e.g. `bW9uc3RlcjplNzc2MTJmNS1iYjNiLTQ2NWUtYTk2NS00MzlhZjk0MDk0YmQ`): Comma-separated job ids from a `/search` response, up to 20 per request. Monster's own `job_uid`, a full `job_seo_id`, and a monster.com job URL are accepted too. Duplicates are collapsed before the cap applies. - country (string, default: `us`): 2-letter country code. Selects the Monster locale the detail lookup runs on, and is the fallback for `job_country` when the posting itself names no country. **Default:** `us` - fields (string): Comma-separated projection over the job object, for example `job_title,employer_name,job_apply_link`. `job_id` and `job_title` are always included. An unknown field name is a 400. Full URL: `https://api.openwebninja.com/realtime-monster-data/job-details` ### GET /company-jobs - Company Jobs Every open Monster job posting at one or more employers. Parameters: - **company** (string, required, e.g. `Genentech`): Comma-separated list of up to 10 employer display names, as returned in `employer_name` on any job. A name containing a comma (`Acme, Inc.`) stays one employer. Matching is substring: a misspelling returns nothing, a short name can reach longer employers. - query (string): Optional free-form keyword filter applied WITHIN the selected employers. Omit it to browse an employer's whole open job list; the company is the constraint here. Exactly one `query` is accepted; a second one is a 400. - location (string): Free-text location, for example `New York, NY` or `London`. Optional: omit it and the search runs country-wide over `country`, which returns far more inventory than any one city. Required if you pass `radius`. - page (integer, default: `1`): 1-based page to start from. Each page is 10 jobs. Capped at 51 by Monster's upstream offset ceiling of 500, and `page` + `num_pages` may not cross it either. **Default:** `1` **Allowed values:** `1-51` - num_pages (integer, default: `1`): How many consecutive pages to fetch and concatenate, starting at `page`. Each page is 10 jobs and one billed request. A value above 20 returns a 400 error. **Default:** `1` **Allowed values:** `1-20` - country (string, default: `us`): 2-letter country code. Selects both the Monster locale the search runs on and the market searched, and both matter: a country's own locale returned 1.35x to 6.9x the inventory `en-US` did. See Coverage for the markets Monster actually carries. **Default:** `us` - date_posted (string, default: `all`, allowed: all | today | 3days | week | month): Only return jobs posted within this window, applied by Monster server-side with no downgrade. Monster filters on its own refresh date, so a returned job's `job_posted_at` can be older than the window. `all` sends no filter. **Default:** `all` **Allowed values:** `all`, `today`, `3days`, `week`, `month` - employment_types (string, allowed: FULLTIME | PARTTIME | CONTRACTOR | INTERN): Comma-separated employment types. Applied by Monster server-side, and OR-ed: a job matching any listed type is returned. An unrecognised value is a 400, because Monster itself rejects one. **Allowed values:** `FULLTIME`, `PARTTIME`, `CONTRACTOR`, `INTERN` - radius (integer): Search radius around `location`, in KILOMETRES, converted to the miles Monster expects. Requires `location`; Monster ignores a radius on a country-wide search, so that combination is a 400. Past the maximum Monster returns nothing, so an out-of-range value is also a 400. **Allowed values:** `1-160` - fields (string): Comma-separated projection over the job object, for example `job_title,employer_name,job_apply_link`. `job_id` and `job_title` are always included. An unknown field name is a 400. Full URL: `https://api.openwebninja.com/realtime-monster-data/company-jobs` ## Base URL and Authentication - Base URL: `https://api.openwebninja.com/realtime-monster-data` - Auth: API key in the `x-api-key` header. Get a key by subscribing (free tier available) at https://app.openwebninja.com/api/realtime-monster-data ## Topics monster api, monster jobs api, monster job search api, job postings api, company jobs api, job details api, recruiting api, talent intelligence api, job skills api, jobs data api ## Links - API page: https://www.openwebninja.com/api/real-time-monster-data - Get an API key / subscribe: https://app.openwebninja.com/api/realtime-monster-data - Pricing & plans: https://app.openwebninja.com/api/realtime-monster-data/pricing - Website: https://www.openwebninja.com - OpenAPI spec: https://openwebninja.s3.us-east-1.amazonaws.com/portal/openapi/realtime_monster_data.yaml - Support: support@openwebninja.com _Last updated: 2026-09-23_