# Integrations

Recommended patterns for your own code - and ready-made integrations for Postman, AI assistants and no-code tools.

This page has two parts: proven patterns for keeping a copy of the job postings in your own system with as few requests as possible - and [ready-made integrations](#postman-collections) for Postman, AI assistants and no-code tools.

## Job Postings API (JSON)

### 1. Size the query first

Call `count` with the same filters to know how many postings - and requests (10 postings each) - a query needs. Each count is one request.

```bash
curl 'https://daily-international-job-postings.p.rapidapi.com/api/v2/jobs/count?countryCode=de&title=developer&dateCreatedMin=2026-09-01&dateCreatedMax=2026-09-30&isDuplicate=false' \
  --header 'X-RapidAPI-Key: YOUR_API_KEY'
```

### 2. Initial backfill

Load the last weeks or months day by day (`dateCreated=YYYY-MM-DD`) or as a date range, with `cursor=true` for complete, stable paging. Store each posting with `jsonLD.identifier` as key, so repeated imports update instead of duplicate.

### 3. Daily sync

Postings are added continuously and a day is complete about two days later. Run a daily job that fetches the **last three days** (`dateCreatedMin` = today - 3, `dateCreatedMax` = today) and upserts by `jsonLD.identifier`. Overlapping days cost a few extra requests but never miss late arrivals.

```python
import datetime, requests

URL = "https://daily-international-job-postings.p.rapidapi.com/api/v2/jobs/search"
HEADERS = {"X-RapidAPI-Key": "YOUR_API_KEY"}
today = datetime.date.today()
params = {
    "countryCode": "de",
    "title": "developer",
    "isDuplicate": "false",
    "dateCreatedMin": str(today - datetime.timedelta(days=3)),
    "dateCreatedMax": str(today),
    "cursor": "true",
}
while True:
    data = requests.get(URL, headers=HEADERS, params=params, timeout=30).json()
    for job in data.get("result", []):
        upsert(job["jsonLD"]["identifier"], job)  # your storage
    if not data.get("nextCursor"):
        break
    params["cursor"] = data["nextCursor"]
```

Want only the newest postings, e.g. for alerts? Use `sort=newest` and stop as soon as you reach a posting you already know.

### 4. Recover after an outage

Store the date of the last successful run. After a failure, set `dateCreatedMin` to that date and run the sync again - the upsert makes it safe to fetch days twice.

### 5. Remove outdated postings

Postings are not re-checked after collection. Use `dateActive` (presumed end date, from `dateExpired` or `dateCreated` + 1 month) or `jsonLD.validThrough` to hide postings that are probably no longer open.

### 6. Avoid duplicates

Reposts of the same job (same company, city, country and title within 3 days) are flagged with `isDuplicate`. Send `isDuplicate=false` to skip them - it also saves requests.

### 7. Handle errors and limits

Retry **429** and **503** with exponential backoff, fix the request on **400**. Watch `x-ratelimit-requests-remaining` to see when you reach overage. Details: [Pagination, rate limits & quota](https://api.techmap.io/pagination-and-limits) and [Errors & billing](https://api.techmap.io/errors-and-billing).

## RSS Feed API (job boards)

1. **Build one feed URL per category**, e.g. per country and job title. The key goes into the URL: `https://job-postings-rss-feed.p.rapidapi.com/api/rss/v1/jobs_full?countryCode=us&title=nurse&rapidapi-key=YOUR_API_KEY`.
2. **Leave `dateCreated` empty** for a rolling feed: each import gets the postings of the day before yesterday, the last complete day. Set `dateCreated` only for one-off backfills.
3. **Import once a day.** More frequent imports return the same postings and cost requests. The number of postings per import depends on the plan - see [Pagination, rate limits & quota](https://api.techmap.io/pagination-and-limits); from the Pro plan on, importers that follow `page` get more.
4. **Let the job board expire postings** after about 30 days - the feed does not send removals.
5. **Use the same feed URL in any importer** (WordPress job plugins, jBoard, JobBoard.io and others). Keep the key private: anyone with the URL uses your RapidAPI quota.

## Postman collections

Import a collection into Postman (or Insomnia/Bruno), set the variable `rapidapiKey` to your key and send the first request. All parameters are included and described; optional ones are disabled.

- [Job Postings API (Postman collection)](https://api.techmap.io/techmap-jobs_v2.postman_collection.json) - [OpenAPI spec](https://api.techmap.io/techmap-jobs_v2_openapi.json)
- [Job Postings RSS Feed API (Postman collection)](https://api.techmap.io/techmap-rss_v1.postman_collection.json) - [OpenAPI spec](https://api.techmap.io/techmap-rss_v1_openapi.json)

## No-code and AI integrations

All integrations are open source (MIT) and use your own key for the Job Postings API.

### MCP server for AI assistants

Lets Claude, Cursor, VS Code and other MCP clients search and count job postings and build RSS feed URLs.

[Docs](https://jobdatafeeds.com/integrations/mcp-server) · [npm @techmap/mcp-server](https://www.npmjs.com/package/@techmap/mcp-server) · [Smithery](https://smithery.ai/servers/techmap/job-postings) · [GitHub](https://github.com/TechMap/mcp.techmap.io)

### n8n community node

Search jobs, build RSS feed URLs, trigger workflows on new jobs and use Techmap as a tool of the n8n AI Agent.

[Docs](https://jobdatafeeds.com/integrations/n8n) · [npm n8n-nodes-techmap](https://www.npmjs.com/package/n8n-nodes-techmap) · [GitHub](https://github.com/TechMap/n8n.techmap.io)

### Zapier

Trigger "New Job Posting" and search "Find Job Postings" (invite-only for now).

[Docs](https://jobdatafeeds.com/integrations/zapier) · [GitHub](https://github.com/TechMap/zapier.techmap.io)

### Pipedream

Action "Search Jobs" and polling source "New Jobs".

[Docs](https://jobdatafeeds.com/integrations/pipedream) · [GitHub](https://github.com/TechMap/pipedream.techmap.io)
