JobsPipe
Guides

Build a daily new-jobs feed

Poll JobsPipe for postings added since your last run.

A common integration is a job that runs on a schedule (cron, a worker, a serverless function) and pulls everything posted since it last ran - to power alerts, a feed, or a database sync.

Approach

Use the posted-date filters to scope to recent postings:

  • posted_at_max_age_days - simplest: "anything from the last N days".
  • posted_at_gte - precise: "anything on or after this date".

Then paginate with the cursor until you've drained the result set.

Example: jobs from the last day

import requests

URL = "https://api.jobspipe.dev/v1/jobs/search"
HEADERS = {"Authorization": "Bearer jp_live_your_key_here"}

def fetch_recent(titles, country="US"):
    cursor, jobs = None, []
    while True:
        body = {
            "job_title_or": titles,
            "job_country_code_or": [country],
            "posted_at_max_age_days": 1,
            "limit": 100,
        }
        if cursor:
            body["cursor"] = cursor
        page = requests.post(URL, headers=HEADERS, json=body).json()
        jobs.extend(page["data"])
        cursor = page["metadata"].get("next_cursor")
        if not cursor:
            return jobs

new_jobs = fetch_recent(["software engineer", "data engineer"])
print(f"{len(new_jobs)} new postings")
const URL = "https://api.jobspipe.dev/v1/jobs/search";
const headers = {
  Authorization: "Bearer jp_live_your_key_here",
  "Content-Type": "application/json",
};

async function fetchRecent(titles, country = "US") {
  let cursor = null;
  const jobs = [];
  do {
    const body = {
      job_title_or: titles,
      job_country_code_or: [country],
      posted_at_max_age_days: 1,
      limit: 100,
    };
    if (cursor) body.cursor = cursor;
    const page = await fetch(URL, {
      method: "POST",
      headers,
      body: JSON.stringify(body),
    }).then((r) => r.json());
    jobs.push(...page.data);
    cursor = page.metadata.next_cursor;
  } while (cursor);
  return jobs;
}

const newJobs = await fetchRecent(["software engineer", "data engineer"]);
console.log(`${newJobs.length} new postings`);

Deduplicate across runs

JobsPipe gives every posting a stable id (same job, same ID across sources). Track the IDs you've already processed and skip them on the next run, so a job that stays live for several days is only handled once.

Each call is one request against your monthly quota - independent of how many jobs come back. Larger limit values (up to your plan's max) mean fewer calls to drain a feed.

On this page