# Get job postings as RSS feed - Job Postings RSS Feed API

`GET /api/rss/v1/jobs_full` - Job Postings RSS Feed API

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.

## Request

Base URL: `https://job-postings-rss-feed.p.rapidapi.com` - authentication: see [How to authenticate](https://api.techmap.io/quickstart#how-to-authenticate).

### curl

```bash
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

```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

```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
// 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
    }
}
```

## Parameters

| Parameter | In | Type | Description |
|---|---|---|---|
| `dateCreated` | query | string | The day the job posting was created / posted on using the format `YYYY-MM-DD` or `YYYY-MM`. If empty, the current day minus 2 days is used. |
| `dateCreatedMin` | query | string | The starting date for a date range search of when the job posting was created or posted, using the format `YYYY-MM-DD`. Only used if `dateCreated` is empty; `dateCreatedMin` and `dateCreatedMax` must be used together. |
| `dateCreatedMax` | query | string | The ending date for a date range search of when the job posting was created or posted, using the format `YYYY-MM-DD`. Only used if `dateCreated` is empty; `dateCreatedMin` and `dateCreatedMax` must be used together. |
| `countryCode` | query | string | 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` | query | string | The city the workplace is located in, extracted from the job posting or geo-location. |
| `title` | query | string | Free-text search within the title of the job postings. |
| `skills` | query | string | The skills, keywords, or tags associated with the job posting. |
| `language` | query | string | 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` | query | string | The workplace of the job, extracted from the job posting such as remote, hybrid, onsite, field, offshore, etc. |
| `contractType` | query | string | The type of employment contract extracted from the job posting such as permanent, temporary, internship, etc. |
| `workType` | query | string | The type of work duration extracted from the job posting such as fulltime, parttime, flextime, etc. |
| `hasSalary` | query | string | A flag indicating if the job posting contains salary information. |
| `minSalary` | query | number | The minimum salary of the job posting. Can be yearly, monthly, or hourly and any currency. |
| `isDirect` | query | string | A flag indicating if the job posting URL links directly to the company's website or ATS career page. |
| `isDuplicate` | query | string | 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` | query | string | A flag indicating if the job posting was posted by a recruiting firm. |
| `industry` | query | string | The industry extracted from the job posting or categorization in the job board, such as advertising, agriculture, it, healthcare, etc. |
| `company` | query | string | The company that posted the job posting (can be a recruiting firm). |
| `occupation` | query | 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` | query | string | The timezone the job is located in such as CET, PST, or UTC |
| `timezoneOffset` | query | integer | The numeric offset of the timezone from UTC. |
| `timezoneMin` | query | integer | The minimum numeric offset of the timezone from UTC. Requires a 'timezoneMax' value greater than 'timezoneMin' to search in a timezone range. |
| `timezoneMax` | query | integer | The maximum numeric offset of the timezone from UTC. Must be larger than 'timezoneMin' to search in a timezone range. |
| `geoPointLat` | query | number | The geographic latitude of a GeoPoint used in a distance search. |
| `geoPointLng` | query | number | The geographic longitude of a GeoPoint used in a distance search. |
| `geoDistance` | query | string | The distance from a GeoPoint specified with 'geoPointLat' and 'geoPointLng'. |
| `geoTopLeftLat` | query | number | The geographic latitude of the top left GeoPoint in a bounding box search. |
| `geoTopLeftLng` | query | number | The geographic longitude of the top left GeoPoint in a bounding box search. |
| `geoBottomRightLat` | query | number | The geographic latitude of the bottom right GeoPoint in a bounding box search. |
| `geoBottomRightLng` | query | number | The geographic longitude of the bottom right GeoPoint in a bounding box search. |
| `page` | query | integer | 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` | query | integer | The number of job postings per request. Max and default depend on your plan: Basic 10, Pro 10, Ultra 100, Mega 1000. |

## Responses

| Status | Description |
|---|---|
| **200** | Success - indicating a correct query execution with results |
| **400** | Bad Request - A parameter value could not be parsed, e.g. an unknown `countryCode` or an invalid date. **Solution:** 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. **Solution:** 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."). **Solution:** 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. **Solution:** 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. **Solution:** 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. **Solution:** 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. **Solution:** Retry once. If it persists, contact data@techmap.io with the full request URL (without your key). |
| **503** | Service Unavailable - The search backend is temporarily unavailable. **Solution:** Retry later with exponential backoff. |
| **509** | Bandwidth Limit Exceeded - The response would be larger than 6 MB. **Solution:** Use a smaller `pageSize` or narrow the query. |

## Example response

```xml
<?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>
...
```

Interactive reference with all schemas: [Job Postings RSS Feed API reference](https://api.techmap.io/rss-api#tag/RSS-feed/operation/jobs_full).
