Techmap's Job Postings RSS Feed (1.6.2)
Download OpenAPI specification:Download
This API provides access to full job postings in long RSS format, sourced through web crawling and scraping from various platforms, with jobs available for up to three months.
Job postings are collected directly from a diverse range of sources, including:
- Techmap’s Web Crawlers
- ATS Career Pages (e.g., Workday, Personio, JazzHR)
- Job Boards (e.g., LinkedIn, Monster, Dice)
- Job Aggregators (e.g., Indeed, Glassdoor, Xing)
- Government Employment Offices (e.g., German Arbeitsagentur)
This API enables seamless integration of job postings from multiple sources into your job board, career site, or recruitment platform, making it ideal for backfilling job listings with fresh, relevant data.
Boolean Queries
Most query parameters in the API support flexible Boolean queries, enabling precise filtering of job postings using multiple keywords, keyphrases, and logical operators. Below are the supported query types:
Should Searches (OR): Keywords separated by a comma will match at least one keyword. Example:
title=java,developerMatches jobs with either "java" or "developer" in the title.Must Searches (AND): Keywords with an encoded
+sign (%2Bin the URL) must be present. Example:title=%2bjava,%2bdeveloperMatches jobs with both "java" and "developer" in the title.Must-Not Searches (NOT): Keywords with a
-sign before are excluded. Example:title=%2bjava,-mysqlMatches jobs with "java" but not "mysql" in the title.Keyphrase Searches: Words separated with spaces in double quotes count as one keyword / keyphrase. Example:
city="New York"Matches jobs in "New York".
Notes
- Parameter Combinations: You can combine most parameters, but some combinations may not work together. For example, a geo bounding box cannot be used together with a geo distance search.
- Field Availability: Not all fields are populated for every job posting. Commonly missing fields include
state,postCode, ordepartment. - Authentication: The key goes into the URL as query parameter
rapidapi-key- no header needed, so the feed URL works in any job board importer. See How to authenticate below.
Examples
- Jobs in Germany:
curl -X GET "https://job-postings-rss-feed.p.rapidapi.com/api/rss/v1/jobs_full?countryCode=de&rapidapi-key=YOUR_API_KEY"
- Subscribe to the Basic plan of the Job Postings RSS Feed API on RapidAPI. It has no hard monthly limit - requests above the included quota are billed as overage (see Errors & billing).
- Copy your key from the RapidAPI listing → Endpoints tab → code snippet → value of
X-RapidAPI-Key- one key per RapidAPI application. - Make your first call. Replace
YOUR_API_KEYin the URL with your key. A successful call returns HTTP 200.
curl
curl --request GET \
--url 'https://job-postings-rss-feed.p.rapidapi.com/api/rss/v1/jobs_full?countryCode=us&title=developer&rapidapi-key=YOUR_API_KEY'
Python
import requests
url = "https://job-postings-rss-feed.p.rapidapi.com/api/rss/v1/jobs_full"
params = {"countryCode": "us", "title": "developer", "rapidapi-key": "YOUR_API_KEY"}
response = requests.get(url, params=params, timeout=30)
response.raise_for_status()
print(response.text) # RSS/XML feed
JavaScript
// Node.js 18+ or browser
const url = new URL('https://job-postings-rss-feed.p.rapidapi.com/api/rss/v1/jobs_full');
url.search = new URLSearchParams({ 'countryCode': 'us', 'title': 'developer', 'rapidapi-key': 'YOUR_API_KEY' });
const response = await fetch(url);
if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`);
console.log(await response.text()); // RSS/XML feed
Java
// Java 11+
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class TechmapExample {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://job-postings-rss-feed.p.rapidapi.com/api/rss/v1/jobs_full?countryCode=us&title=developer&rapidapi-key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() != 200) throw new RuntimeException(response.statusCode() + ": " + response.body());
System.out.println(response.body()); // RSS/XML feed
}
}
Getting an error instead? See Errors & billing.
Requests are authenticated and billed by the marketplace you subscribe through. The base URL, the key and the plans depend on that marketplace.
RapidAPI
- Base URL:
https://job-postings-rss-feed.p.rapidapi.com - Key: query parameter
rapidapi-key=YOUR_API_KEYin the request URL - no header needed. This lets you paste the feed URL into any job board importer that only accepts a URL. - Where to find the key: RapidAPI listing → Endpoints tab → code snippet → value of
X-RapidAPI-Key- one key per RapidAPI application (see RapidAPI docs). - Plans and prices: RapidAPI pricing page
- Calling the backend directly (without RapidAPI) returns 401.
All errors return JSON with a message field.
| Status | Cause | Solution |
|---|---|---|
| 400 Bad Request | A parameter value could not be parsed, e.g. an unknown countryCode or an invalid date. |
Check the value against the parameter description. The message names the invalid parameter. |
| 401 Unauthorized | The key is missing or invalid, or the request was sent directly to the backend instead of RapidAPI. | Send your key in the query parameter rapidapi-key and use the base URL https://job-postings-rss-feed.p.rapidapi.com. Copy the key again from the RapidAPI listing if it was rotated. |
| 403 Forbidden | You are not subscribed to this API ("You are not subscribed to this API."). | Subscribe to the Basic plan. |
| 404 Not Found | The endpoint path does not exist (typo, wrong API version) or a required search parameter is missing. | Check the path and add at least one search parameter (e.g. countryCode). The message lists the allowed parameters. |
| 405 Method Not Allowed | Another HTTP method than GET was used. | Use GET. |
| 429 Too Many Requests | Too many requests in a short time window (rate limit of your RapidAPI plan, e.g. 1 request/second on Basic). This is not a monthly limit - the plans have no hard limit, extra requests are billed as overage. RapidAPI also answers 429 after repeated calls with an invalid key. | Slow down and retry with exponential backoff (e.g. 1 s, 2 s, 4 s). If it persists, check that your key is valid. |
| 500 Internal Server Error | An unexpected error on our side. | Retry once. If it persists, contact data@techmap.io with the full request URL (without your key). |
| 502/504 Bad Gateway / Gateway Timeout | RapidAPI did not get a timely answer from the backend, typically for very broad queries. | Narrow the query (more filters, shorter date range) and retry. |
| 503 Service Unavailable | The search backend is temporarily unavailable, or it could only answer partially (some index shards failed or timed out). Partial results are never returned as 200. | Retry later with exponential backoff. |
| 509 Bandwidth Limit Exceeded | The response would be larger than 6 MB. | Use a smaller pageSize or narrow the query. |
Plans, included requests and overage: Errors & billing.
- 2026-10-06 (v1.6.2): A partial answer from the search backend (some index shards failed or timed out) now returns 503 instead of a 200 with incomplete results. A 200 response is always complete, so you can safely treat missing postings as removed.
- 2026-10-03 (v1.6.1): Documentation release. Unknown
countryCodevalues (e.g.zz,00) and invalid dates or date ranges now return 400 with a clear message. All error responses now return valid JSON with amessagefield (some were plain text or invalid JSON before). Added Quickstart, How to authenticate (per marketplace) and Errors & billing. Fixed the server URL (https://job-postings-rss-feed.p.rapidapi.com) and documented the key as query parameterrapidapi-key(removed the misleading Bearer header from the examples). The feed's channel<link>now shows the public feed URL without your key. - 2026-06-03 (v1.6): Fixed Boolean prefix operators (
+/-) not applying correctly with multiple comma-separated values. Multiple values per field now use AND logic between fields and OR logic within a field. - 2025-04-22 (v1.2): Added isDuplicate parameter for excluding potential duplicates.
- 2025-03-24 (v1.1): Added date range parameter for querying specific time periods.
- 2025-03-17 (v1.0): Published first version.
Get job postings as RSS feed
Use this endpoint to import job postings into job board software or feed readers - the key goes into the URL, so the feed URL can be pasted anywhere. For JSON, use the Job Postings API. This endpoint returns an RSS feed containing job postings, including full job descriptions, based on the specified search query. Results can be paginated for efficient data retrieval.
The RSS/XML data can be easily customized to meet specific needs and seamlessly integrated into a job board to backfill it with fresh, relevant job postings.
Authorizations:
query Parameters
| dateCreated | string <date> ^\d{4}-\d{2}(-\d{2})?$ The day the job posting was created / posted on using the format |
| dateCreatedMin | string <date> ^\d{4}-\d{2}(-\d{2})?$ The starting date for a date range search of when the job posting was created or posted, using the format |
| dateCreatedMax | string <date> ^\d{4}-\d{2}(-\d{2})?$ The ending date for a date range search of when the job posting was created or posted, using the format |
| countryCode | string <ISO 3166-1 alpha-2> Example: countryCode=us The country the job is located in described by a 2-letter country code from ISO 3166-1 alpha-2. Internally, we lower-case the countryCode and convert 'gb' into 'uk' and 'el' into 'gr' - you can use both spellings. |
| city | string The city the workplace is located in, extracted from the job posting or geo-location. |
| title | string Free-text search within the title of the job postings. |
| skills | string The skills, keywords, or tags associated with the job posting. |
| language | string <ISO 639-1> The language the job posting is written in described by a 2-letter language code from ISO 639-1 such as 'en', 'de' or 'zh'. |
| workPlace | string The workplace of the job, extracted from the job posting such as remote, hybrid, onsite, field, offshore, etc. |
| contractType | string The type of employment contract extracted from the job posting such as permanent, temporary, internship, etc. |
| workType | string The type of work duration extracted from the job posting such as fulltime, parttime, flextime, etc. |
| hasSalary | string <boolean> Example: hasSalary=true A flag indicating if the job posting contains salary information. |
| minSalary | number The minimum salary of the job posting. Can be yearly, monthly, or hourly and any currency. |
| isDirect | string <boolean> A flag indicating if the job posting URL links directly to the company's website or ATS career page. |
| isDuplicate | string <boolean> A flag indicating whether the job posting is considered a duplicate of another, either within the same source or across multiple sources. Note: We currently err on the safe side, resulting in more false duplicates than there are. |
| isRecruiter | string <boolean> A flag indicating if the job posting was posted by a recruiting firm. |
| industry | string The industry extracted from the job posting or categorization in the job board, such as advertising, agriculture, it, healthcare, etc. |
| company | string The company that posted the job posting (can be a recruiting firm). |
| occupation | string The occupation type extracted from the job title reduced to a stem form incl. several synonyms. For example: programmer, executive, manager, engineer, nurse, etc. |
| timezone | string The timezone the job is located in such as CET, PST, or UTC |
| timezoneOffset | integer [ -12 .. 12 ] The numeric offset of the timezone from UTC. |
| timezoneMin | integer [ -12 .. 12 ] The minimum numeric offset of the timezone from UTC. Requires a 'timezoneMax' value greater than 'timezoneMin' to search in a timezone range. |
| timezoneMax | integer [ -12 .. 12 ] The maximum numeric offset of the timezone from UTC. Must be larger than 'timezoneMin' to search in a timezone range. |
| geoPointLat | number <number> [ -90 .. 90 ] The geographic latitude of a GeoPoint used in a distance search. |
| geoPointLng | number <number> [ -180 .. 180 ] The geographic longitude of a GeoPoint used in a distance search. |
| geoDistance | string [ 0 .. 200 ] ^[0-9]+(km|mi)$ The distance from a GeoPoint specified with 'geoPointLat' and 'geoPointLng'. |
| geoTopLeftLat | number <number> [ -90 .. 90 ] The geographic latitude of the top left GeoPoint in a bounding box search. |
| geoTopLeftLng | number [ -180 .. 180 ] The geographic longitude of the top left GeoPoint in a bounding box search. |
| geoBottomRightLat | number <number> [ -90 .. 90 ] The geographic latitude of the bottom right GeoPoint in a bounding box search. |
| geoBottomRightLng | number [ -180 .. 180 ] The geographic longitude of the bottom right GeoPoint in a bounding box search. |
| page | integer >= 1 Default: 1 The page of the page-based pagination search results starting at 1. Defaults to 1 if not stated. Pagination is included from the Pro plan on - with smaller plans you always get page 1. |
| pageSize | integer >= 1 The number of job postings per request. Max and default depend on your plan: Basic 10, Pro 10, Ultra 100, Mega 1000. |
Responses
Request samples
- curl
- Python
- JavaScript
- Java
curl --request GET \ --url 'https://job-postings-rss-feed.p.rapidapi.com/api/rss/v1/jobs_full?countryCode=us&title=developer&rapidapi-key=YOUR_API_KEY'
Response samples
- 200
- 400
- 401
- 403
- 404
- 405
- 429
- 500
- 503
- 509
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel> <title>Techmap.io Job Posting RSS Feed API</title> <link>https://job-postings-rss-feed.p.rapidapi.com/api/rss/v1/jobs_full?workPlace=remote</link> <description>Techmap.io´s Job Posting API in RSS 2.0 Feed format based on a search query.</description> <pubDate>Mon, 17 Mar 2025 11:42:13 GMT</pubDate> <docs>https://api.techmap.io/rss-api</docs> <webMaster>data@techmap.io</webMaster> <ttl>1440</ttl> <contact>Do you have any feedback for us? Missing fields? Unclear docu? Other improvement suggetions? Please contact us at data@techmap.io</contact> <apiVersion>1.0.0</apiVersion> <page>1</page> <pageSize>10</pageSize> <totalCount>2002</totalCount> <query> <query> <bool> <must> <range> <dateCreated> <gte>2025-03-15T00:00:00.000Z</gte> <lte>2025-03-15T23:59:59.999Z</lte> </dateCreated> </range> </must> <must> <match> <workPlace>remote</workPlace> </match> </must> </bool> </query> </query> <item> <title>Condition Monitoring Engineer</title> <description>**About us**Nanoprecise Sci Corp is an ...</description> <pubDate>Sat, 15 Mar 2025 00:00:00 GMT</pubDate> <link>https://ca.jora.com/job/ondition-Monitoring-Engineer-a856799e2cad51d16b83025003e3fb29</link> <guid>https://ca.jora.com/job/Condition-Monitoring-Engineer-a856799e2cad51d16b83025003e3fb29</guid> <category>Monitoring Engineer</category> <location>Canada, Canada</location> <city>Kanata</city> <state>ON</state> <country>Canada</country> <company>Nanoprecise</company> <company_url>https://nanoprecise.io</company_url> <company_logo/> <workType/> <contractType/> <industry>Engineering</industry> <careerLevel/> <workPlace>Remote</workPlace> <skills>Cat, Io</skills> <department/> <occupation>Monitoring Engineer</occupation> </item>...</channel></rss>