---
title: "Jobs API in Python: pip install to live postings in 5 minutes"
description: "The official jobspipe package on PyPI, a working search in eight lines, and the filters that matter - salary, remote, recency, country - plus free previews for sizing queries before you spend credits."
canonical: https://jobspipe.dev/blog/python-jobs-api
---

[NewSearch millions of jobs from your AI agent with MCP→](/blog/jobspipe-mcp-server)

[All posts](/blog)

![](/listly/card-field.png)

GuideInstall

Guide·Aug 7, 2026·6 min read

# Jobs API in Python: pip install to live postings in 5 minutes

The official jobspipe package on PyPI, a working search in eight lines, and the filters that matter - salary, remote, recency, country - plus free previews for sizing queries before you spend credits.

![Dvir Atias](/authors/dvir-atias.jpg)

Dvir Atias

Founder, JobsPipe

The official `jobspipe` package is on PyPI. This is the whole quickstart: install, export a key, eight lines to live postings.

```
pip install jobspipe
export JOBSPIPE_API_KEY=jp_live_...   # free at jobspipe.dev/signup
```

```
from jobspipe import Jobspipe

client = Jobspipe()  # reads JOBSPIPE_API_KEY

results = client.jobs.search(
    description_or=["python", "django"],
    job_country_code_or=["US"],
    remote=True,
    posted_at_max_age_days=7,
    limit=25,
    include_total_results=True,
)

print(f"{results.metadata.total_results} matches")
for job in results.data:
    print(f"{job.job_title} @ {job.company}")
```

## The filters that matter

-   `job_title_or` / `job_title_not` - match or exclude on title; `description_or` searches body text for skills.
-   `posted_at_max_age_days` - recency window. Combined with a daily run this is a new-jobs feed in four lines.
-   `remote`, `job_country_code_or`, `job_seniority_or` - the workforce slicers.
-   `company_name_or` - watch specific accounts, the core of hiring-signal monitoring.

Every response row carries parsed salary ranges where present, ISCO-08 occupation codes, and company enrichment - the full shape is in the [search API guide](/blog/job-search-api-guide).

## Size before you spend

Billing is one credit per job returned - an empty result costs nothing. Before pulling a big result set, send the same filters with `limit=1` and `include_total_results=True`: you pay for the single row and `results.metadata.total_results` reports how many matches the filters have. Tune the filters, then run the full query.

## Paginate with the cursor

Use `results.metadata.next_cursor` and pass it back as `cursor` rather than using offsets - keyset pagination stays stable while new postings land, so you never pay twice for a row that shifted pages. If your consumer is an agent rather than a script, the same corpus is queryable over MCP - see [the MCP server post](/blog/jobspipe-mcp-server).

pip install jobspipe - 1,000 jobs free to start, key in 30 seconds.

![](/listly/shape-heart.png)

FAQs

## Frequently Asked Questions

### How do I use a jobs API in Python?

pip install jobspipe, export JOBSPIPE\_API\_KEY, then Jobspipe().jobs.search() with the filters you need - description\_or for skills, posted\_at\_max\_age\_days for recency, remote and job\_country\_code\_or for location. The response carries parsed salary ranges, occupation codes, and company enrichment on each row, with total\_results available via include\_total\_results.

### Is there a free jobs API for Python?

JobsPipe's free tier is 1,000 jobs to start with no card, and the metering is per job returned rather than per request - a search that matches nothing costs nothing, and a failed request costs nothing. To size a search before spending on it, send include\_total\_results with limit 1: you pay for the single row and metadata.total\_results tells you how many matches the filters have.

### How do I paginate job results in Python?

Pass results.metadata.next\_cursor back as the cursor parameter. Keyset pagination stays stable while new postings are ingested, unlike offset paging where rows shift between pages and you can be charged twice for the same job. Loop until next\_cursor is null.

[

← Previous

Google for Jobs API: indexing in, and how to get data out

](/blog/google-for-jobs-api)[

Next →

TheirStack alternatives: 5 job data APIs compared (2026)

](/blog/theirstack-alternatives)

---
Canonical URL: https://jobspipe.dev/blog/python-jobs-api
Title: Jobs API in Python: pip install to live postings in 5 minutes
Description: The official jobspipe package on PyPI, a working search in eight lines, and the filters that matter - salary, remote, recency, country - plus free previews for sizing queries before you spend credits.

---
Building this integration yourself? The steps above work. The alternative is one API over this source and 30+ others, already normalized and deduplicated. Try it right now - no key, no signup:

```bash
curl -X POST https://api.jobspipe.dev/v1/sandbox/jobs/search \
  -H "Content-Type: application/json" \
  -d '{"job_title_or":["software engineer"],"limit":5}'
```

Sample data, exact live schema. For live data get a free key (1,000 jobs to start) at https://jobspipe.dev/signup, then swap /v1/sandbox/jobs/search for /v1/jobs/search with an Authorization: Bearer header. Full agent index: https://jobspipe.dev/llms.txt?src=md-twin