Official Python SDK for the Hirebase API (jobs & company data)
Project description
- Sync and async clients (
hirebase.Client/hirebase.AsyncClient). - Typed by default — responses come back as Pydantic models; pass
return_type=dictanywhere for raw dicts. - Streaming exports — kick off an export, poll it, download it, and stream millions of jobs without loading them into memory.
- Self-contained — the SDK ships its own types and depends only on
requests,httpx, andpydantic.
Guides: Getting started · Jobs · Companies · Resumes · Tasks · Errors · Examples
Installation
pip install hirebase
# Optional extras
pip install "hirebase[streaming]" # ijson, for streaming JSON-array exports
pip install "hirebase[cli]" # the bundled `hirebase` command-line tool
Authentication
Pass your API key directly, or set it via the environment:
import hirebase
client = hirebase.Client(api_key="sk_live_...")
export HIREBASE_API_KEY="sk_live_..."
export HIREBASE_BASE_URL="https://api.hirebase.org" # optional, this is the default
Resolution order for every setting is argument → environment variable →
default. The base URL defaults to https://api.hirebase.org.
Quickstart
import hirebase
client = hirebase.Client(api_key="sk_live_...")
# Search jobs — results are typed and iterable
result = client.jobs.search({
"job_titles": ["Software Engineer", "Product Engineer"],
"locations": [{"city": "San Francisco", "region": "California",
"country": "United States"}],
"limit": 20,
})
print(result.total_count, "matches")
for job in result:
print(job.job_title, "@", job.company_name, "—", job.salary_range)
Booleans are accepted natively (visa=True), and locations is a friendly
alias for the API's geo_locations. Unknown filter keys are passed through
untouched, so new API features work before the SDK is updated.
Async
import asyncio, hirebase
async def main():
async with hirebase.AsyncClient(api_key="sk_live_...") as client:
result = await client.jobs.search({"job_titles": ["Engineer"]})
for job in result:
print(job.job_title)
asyncio.run(main())
Every method has the same signature on both clients — the async versions are awaitable.
Jobs
# Search
result = client.jobs.search(query, page=1, limit=20)
# Fetch one job
job = client.jobs.get("6958cfd211e2763c3491ef8b")
# Market insights for a cohort (same filter shape as search)
insights = client.jobs.insights({"job_titles": ["Data Scientist"]})
print(insights.headline.median_salary, insights.salary.p90)
Typed inputs
You can pass a plain dict or build a typed query:
from hirebase import JobQuery, SalaryRange
query = JobQuery(
job_titles=["Backend Engineer"],
salary=SalaryRange(min=150_000, currency="USD"),
location_types=["Remote"],
visa=True,
)
result = client.jobs.search(query)
Exporting jobs (async task flow)
Exports are processed server-side and returned as a downloadable file.
query = {
"job_titles": ["Software Engineer", "Product Engineer", "Fullstack Engineer"],
"locations": [{"city": "San Francisco", "region": "California",
"country": "United States"}],
}
# 1. Start the export -> returns a Task
task = client.jobs.export(query, format="json") # or format="csv"
# 2. Poll until it finishes -> (success, result)
success, result = client.tasks.poll(task)
if not success:
raise RuntimeError(f"Export failed: {result.error}")
# 3. Download the file (streamed to disk)
client.stream_file(result["download_url"], file_path="./jobs.json")
# 4. Stream jobs from the file (typed by default; uses constant memory)
for job in client.jobs.stream_file("./jobs.json"):
print(job.job_title)
# ...or get raw dicts
for row in client.jobs.stream_file("./jobs.json", return_type=dict):
...
poll() accepts a Task, a task dict, or a task id, plus interval,
timeout, and an on_progress callback. The result dict contains
download_url, file_size, record_count, and expiry_time.
You can also stream directly from the export URL without saving to disk (JSON Lines exports only):
for job in client.jobs.stream_url(result["download_url"]):
print(job.job_title)
Companies
# Search
companies = client.companies.search({"company_name": "Stripe"})
for company in companies:
print(company.company_name, company.company_slug)
# Get a company by slug — optionally with its jobs and live insights
company = client.companies.get("stripe", return_jobs=True, return_insights=True)
print(company.description_summary)
print(company.insights_data.headline.total_count)
# Bound helpers (the object remembers its client)
insights = company.insights()
jobs = company.get_jobs(limit=10)
# Company-scoped insights directly
insights = client.companies.insights("stripe", query={"days_ago": 30})
Typed vs. dict responses
Every method returns typed models by default. Pass return_type=dict to get
the raw API payload instead:
data = client.jobs.search(query, return_type=dict) # -> dict
job = client.jobs.get(job_id, return_type=dict) # -> dict
Errors
All errors subclass hirebase.HirebaseError:
| Exception | Meaning |
|---|---|
ConfigurationError |
No API key / bad config |
AuthenticationError |
401 — invalid API key |
PaymentRequiredError |
402 — plan/credits required |
PermissionError_ |
403 — not allowed |
NotFoundError |
404 |
RateLimitError |
429 |
ServerError |
5xx |
APIError |
any other non-2xx (.status_code, .message, .body) |
TaskFailed / TaskTimeout |
export task failed or timed out |
import hirebase
try:
client.jobs.search(query)
except hirebase.RateLimitError:
...
except hirebase.APIError as e:
print(e.status_code, e.message)
Development
pip install -e ".[dev]"
# Offline unit tests (no network)
pytest
# Live integration tests against the real API
HIREBASE_API_KEY=sk_live_... pytest tests/test_integration.py -v
If your environment preloads conflicting pytest plugins, run with
PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 pytest.
License
MIT — see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hirebase-0.1.1.tar.gz.
File metadata
- Download URL: hirebase-0.1.1.tar.gz
- Upload date:
- Size: 54.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cefd1cf244217e254267c2e013dc043b954e3639ebe5a509547bff6778d6f5b8
|
|
| MD5 |
fe751c474f15aa6b1c9a5181f4aaf8cb
|
|
| BLAKE2b-256 |
ca6289b456a9df91a523bf07fcad0671fe1c542b300d0bf8bcbcf34a58ef2d3a
|
Provenance
The following attestation bundles were made for hirebase-0.1.1.tar.gz:
Publisher:
release.yml on HireBase-1/hirebase-python-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hirebase-0.1.1.tar.gz -
Subject digest:
cefd1cf244217e254267c2e013dc043b954e3639ebe5a509547bff6778d6f5b8 - Sigstore transparency entry: 1730635807
- Sigstore integration time:
-
Permalink:
HireBase-1/hirebase-python-sdk@71a0378e3a320986652ffd648735e480cd4d8a48 -
Branch / Tag:
refs/tags/0.1.1 - Owner: https://github.com/HireBase-1
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@71a0378e3a320986652ffd648735e480cd4d8a48 -
Trigger Event:
release
-
Statement type:
File details
Details for the file hirebase-0.1.1-py3-none-any.whl.
File metadata
- Download URL: hirebase-0.1.1-py3-none-any.whl
- Upload date:
- Size: 59.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66f74b142304b471845618c9e41162ad5a5c7458ec8a3794a161b6fee2ec0ed9
|
|
| MD5 |
3eef5a287a9e42b48382fa8281d987e1
|
|
| BLAKE2b-256 |
c48ac00d4903b40961b45ad911d33cc57cc9ccb11cae7df04e29cc3d596b5162
|
Provenance
The following attestation bundles were made for hirebase-0.1.1-py3-none-any.whl:
Publisher:
release.yml on HireBase-1/hirebase-python-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hirebase-0.1.1-py3-none-any.whl -
Subject digest:
66f74b142304b471845618c9e41162ad5a5c7458ec8a3794a161b6fee2ec0ed9 - Sigstore transparency entry: 1730635948
- Sigstore integration time:
-
Permalink:
HireBase-1/hirebase-python-sdk@71a0378e3a320986652ffd648735e480cd4d8a48 -
Branch / Tag:
refs/tags/0.1.1 - Owner: https://github.com/HireBase-1
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@71a0378e3a320986652ffd648735e480cd4d8a48 -
Trigger Event:
release
-
Statement type: