No Fluff Jobs APInofluffjobs.com ↗
Search and retrieve job postings from nofluffjobs.com. Filter by category, seniority, city, keyword, and employment type. Returns salary, location, and full job details.
What is the No Fluff Jobs API?
The No Fluff Jobs API gives access to 2 endpoints covering job listings from nofluffjobs.com, a Polish-market job board spanning IT, marketing, sales, and HR roles. The search_jobs endpoint accepts filters for category, seniority, city, keyword, remote status, and country, returning paginated summaries including salary ranges and seniority levels. The get_job_details endpoint returns the full posting with structured salary data, location arrays, daily tasks, and requirements.
curl -X GET 'https://api.parse.bot/scraper/721c13f8-f8fa-47a6-b9dc-39954f5e91e1/search_jobs?page=1&category=marketing&page_size=5&seniority=Junior&employment=b2b' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace nofluffjobs-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: NoFluffJobs SDK — search IT jobs in Poland, drill into details."""
from parse_apis.no_fluff_jobs_api import NoFluffJobs, Category, Seniority, Employment, JobNotFound
client = NoFluffJobs()
# Search for senior backend jobs — limit caps total items fetched.
for job in client.jobsummaries.search(category=Category.BACKEND, seniority=Seniority.SENIOR, limit=5):
print(job.title, job.company_name, job.salary_from, job.salary_to, job.salary_currency)
# Drill into the first result's full details via .details() navigation op.
summary = client.jobsummaries.search(keyword="Python", employment=Employment.B2B, limit=1).first()
if summary:
detail = summary.details()
print(detail.title, detail.company_name, detail.company_size)
for salary in detail.salaries:
print(salary.type, salary.from_, salary.to, salary.currency, salary.period)
for loc in detail.locations:
print(loc.city, loc.country, loc.province)
# Typed error handling: catch JobNotFound on a stale slug.
try:
bad_detail = client.jobsummaries.search(limit=1).first()
if bad_detail:
bad_detail.details()
except JobNotFound as exc:
print(f"Job gone: {exc.job_id}")
print("exercised: jobsummaries.search / JobSummary.details / salary+location fields / JobNotFound")
Full-text search and filtering of job postings. Supports category, seniority, city, keyword, employment type, country, and remote filters. Returns paginated results with job summaries. Each JobSummary exposes a navigation op to its full JobDetail. Paginates via integer page counter.
| Param | Type | Description |
|---|---|---|
| city | string | City filter (e.g., 'Warszawa', 'Kraków', 'Wrocław', 'Poznań', 'Gdańsk'). |
| page | integer | Page number (1-indexed). |
| remote | string | Set to 'remote' to filter for remote jobs only. |
| country | string | Country code filter (e.g., 'POL', 'DEU', 'GBR'). |
| keyword | string | Keyword/skill filter (e.g., 'Python', 'Java', 'React'). Comma-separated for multiple. |
| category | string | Job category filter. Accepted values: 'marketing', 'fullstack', 'backend', 'frontend', 'mobile', 'testing', 'devops', 'project-manager', 'business-intelligence', 'business-analyst', 'hr', 'sales', 'customer-service', 'finance', 'erp'. Comma-separated for multiple. |
| page_size | integer | Number of results per page (max ~100). |
| seniority | string | Seniority level filter. Accepted values: 'Junior', 'Mid', 'Senior', 'Expert'. Comma-separated for multiple. |
| employment | string | Employment type filter. Accepted values: 'b2b', 'permanent', 'zlecenie'. Comma-separated for multiple. |
{
"type": "object",
"fields": {
"jobs": "array of job summary objects with id, url, title, company_name, category, seniority, salary_from, salary_to, salary_currency, salary_type, city, all_cities, fully_remote, posted, renewed, reference, requirements, online_interview",
"page": "integer current page number",
"page_size": "integer results per page",
"total_count": "integer total matching jobs",
"total_pages": "integer total pages available"
},
"sample": {
"data": {
"jobs": [
{
"id": "senior-c-developer-fixed-income-trading-stp-augmenta-Remote",
"url": "senior-c-developer-fixed-income-trading-stp-augmenta-remote",
"city": "Remote",
"title": "Senior C++ Developer (Fixed Income Trading / STP)",
"posted": 1779057306891,
"renewed": 1781130906891,
"category": "backend",
"reference": "HHXYY6TN",
"salary_to": 51000,
"seniority": [
"Senior"
],
"all_cities": [
"Remote"
],
"salary_from": 36000,
"salary_type": "b2b",
"company_name": "Augmenta",
"fully_remote": true,
"requirements": [
"C++",
"Experience in the financial industry",
"SQL"
],
"salary_currency": "PLN",
"online_interview": true
}
],
"page": 1,
"page_size": 5,
"total_count": 3159,
"total_pages": 632
},
"status": "success"
}
}About the No Fluff Jobs API
Search and Filter Job Postings
The search_jobs endpoint accepts up to eight filter parameters: category (e.g., backend, frontend, mobile, testing), seniority (comma-separated values like Junior,Mid), city (e.g., Warszawa, Kraków), keyword (comma-separated skills like Python,React), remote, country (ISO-style codes like POL, DEU), page, and page_size (up to ~100 per page). Results include total_count and total_pages for reliable pagination, and each job summary exposes id, url, title, company_name, category, seniority, salary_from, salary_to, salary_currency, and a salary_type field.
Full Job Detail
Passing a job slug from the url field of any search result to get_job_details returns the complete posting. The response includes a salaries array broken down by employment contract type (e.g., B2B, permanent), each entry carrying type, period, from, to, and currency. A locations array lists each physical office option with city, country, street, and province. Additional fields cover seniority as an array, category, posted as a millisecond timestamp, status, and a reference code.
Coverage Scope
No Fluff Jobs focuses on the Polish tech job market but also lists roles from companies hiring in Germany, the UK, and other European markets, accessible via the country filter. The remote parameter isolates fully remote positions. Category coverage includes software engineering disciplines (fullstack, backend, frontend, mobile), QA/testing, data roles, and non-technical functions like marketing, sales, and HR.
The No Fluff Jobs API is a managed, monitored endpoint for nofluffjobs.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when nofluffjobs.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official nofluffjobs.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate senior backend Python roles in Warsaw by combining
category=backend,seniority=Senior,city=Warszawa, andkeyword=Pythoninsearch_jobs. - Build a salary benchmark by collecting
salary_from,salary_to, andsalary_currencyacross seniority levels for a given tech stack. - Track remote-only IT job availability in Poland over time using the
remote=remotefilter and recordingtotal_countper category. - Populate a job alert system by polling
search_jobswith a keyword filter and comparing thepostedtimestamp fromget_job_detailsagainst the last check. - Extract structured multi-contract salary data (B2B vs. permanent) from the
salariesarray inget_job_detailsfor compensation analysis. - Filter cross-border opportunities for a given skill set using
country=DEUorcountry=GBRcombined with akeywordparameter. - Map job density by city by iterating the
cityparameter across major Polish metros and recordingtotal_countper query.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does No Fluff Jobs have an official public developer API?+
What salary information does `get_job_details` return, and how does it differ from the search summary?+
search_jobs returns flat salary_from, salary_to, and salary_currency fields on each summary. get_job_details returns a salaries array with one object per contract type, so a single posting can expose separate ranges for B2B and permanent employment, each with its own period, from, to, and currency.Does the API return the full HTML job description or requirements breakdown?+
get_job_details includes an HTML description field and structured requirements. However, applicant-tracking data, the number of applications received, or employer contact details beyond the job posting itself are not returned. You can fork this API on Parse and revise it to add an endpoint targeting those fields if they become accessible.Are company profiles or employer pages available through this API?+
search_jobs and individual posting detail via get_job_details, but there is no endpoint for employer profile pages, company follower counts, or historical posting activity per company. You can fork it on Parse and revise to add the missing endpoint.How does pagination work in `search_jobs`, and are there limits on `page_size`?+
page number (1-indexed) and an optional page_size up to approximately 100. The response includes total_count and total_pages so you can iterate all results. Requesting a page beyond total_pages returns an empty jobs array rather than an error.