NairaGig APInairagig.com ↗
Access NairaGig job board data via API. Retrieve open freelance gigs, projects, and recruiter postings with pay ranges, skills, and experience levels.
What is the NairaGig API?
The NairaGig API exposes one endpoint — list_jobs — that returns up to 50 open postings per page from NairaGig's freelance and job board, covering native gigs, projects, and recruiter listings. Each posting includes at least 10 structured fields: pay range (budget_min, budget_max, currency), employment type, salary cycle, experience level, posting source, and a direct application link. Pagination, keyword search, job type, and experience level filters are all supported.
curl -X GET 'https://api.parse.bot/scraper/1e2b1628-1d4b-4208-99d8-79c415f6ff5f/list_jobs?job_type=SERVICE' \ -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 nairagig-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: NairaGig Jobs SDK — browse the public job board with filters."""
from parse_apis.nairagig_com_api import NairaGig, JobType, ExperienceLevel, InputFormatInvalid
client = NairaGig()
# Browse the newest open postings, capped at 5 total items.
for job in client.jobs.list(limit=5):
print(job.title, f"{job.budget_min}–{job.budget_max} {job.currency}")
# Filter to intermediate-level jobs and grab the first match.
hit = client.jobs.list(experience_level=ExperienceLevel.INTERMEDIATE, limit=1).first()
if hit is not None:
print(hit.title, hit.company, hit.work_mode)
print("skills:", ", ".join(hit.required_skills))
print("apply →", hit.apply_url)
# Keyword search scoped to service requests.
try:
for gig in client.jobs.list(search="design", job_type=JobType.SERVICE, limit=3):
print(gig.title, gig.experience_level, gig.applications_count, "applicants")
except InputFormatInvalid as e:
# Raised when the site rejects a filter value.
print("invalid filter:", e.message)
print("exercised: jobs.list (browse / filter / search) + InputFormatInvalid")
Returns one page of currently open job, project and recruiter postings from the NairaGig job board, newest first. Each row is one posting with its pay range (budget_min/budget_max in `currency`, plus salary_cycle and employment_type for recruiter postings), experience level, required/preferred skills, free-text requirements and deliverables, duration, application counts and an apply_url (the NairaGig job page for native postings, the recruiter application page for partner postings). Filtering by experience_level or job_type is applied by the site itself; note the site excludes partner recruiter postings when experience_level is set. Keyword `search` is not supported by the site, so when it is given the scraper reads the full stream (at most 500 postings) and matches every whitespace-separated word case-insensitively against title, description, requirements, skills, core features, category and company; pagination then applies to the matched set and `total`/`pages`/`has_more` describe it. `source_total` is always the site's own count of postings before any keyword matching. Pagination is caller-controlled through `page` (default 1) and `limit` (default 20, clamped to 50). An empty `jobs` array with total 0 is a valid result when nothing matches.
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based page number. |
| limit | integer | Rows per page; values above 50 are clamped to 50. |
| search | string | Keyword(s) to match locally against posting text; all words must appear. Omitted = no keyword matching. |
| job_type | string | Posting type filter applied by the site: jobs & projects, or local service requests. Omitted = both. |
| experience_level | string | Experience level filter applied by the site. Omitted = all levels. |
{
"type": "object",
"fields": {
"jobs": "array of posting objects: id, title, description, source (native|recruiter), job_type, status, budget_type, budget_min, budget_max (numbers or null), currency, salary_cycle, employment_type, work_mode, experience_level, location, required_skills, preferred_skills, core_features (arrays of strings), requirements, deliverables, estimated_duration, duration_type, application_deadline, applications_count, company, category, created_at, published_at, apply_url",
"page": "integer, the page returned",
"limit": "integer, rows per page applied",
"pages": "integer, number of pages for `total` at this limit",
"total": "integer, postings matching the request (after keyword matching when search is given)",
"has_more": "boolean, whether a later page exists",
"source_total": "integer, the site's own count of postings for the site-applied filters, before keyword matching"
},
"sample": {
"data": {
"jobs": [
{
"id": "81c31eeb-a081-4d1b-9865-326efbb0595b",
"title": "Java Developer for a backend project",
"source": "native",
"status": "OPEN",
"company": "Chidiebere Edeh",
"category": "Software Developement",
"currency": "NGN",
"job_type": "JOB",
"location": null,
"apply_url": "https://nairagig.com/jobs/81c31eeb-a081-4d1b-9865-326efbb0595b",
"work_mode": "REMOTE",
"budget_max": 500000,
"budget_min": 250000,
"created_at": "2026-06-10T11:55:03.273Z",
"budget_type": "FIXED",
"description": "I need an experienced java developer to complete the backend of an admin side of an ongoing project.",
"deliverables": null,
"published_at": null,
"requirements": null,
"salary_cycle": null,
"core_features": [
"Experience java developer",
"2 to 3 years working experience",
"Ability to work unsupervised."
],
"duration_type": "WEEKS",
"employment_type": null,
"required_skills": [
"Java developer",
"Backend development"
],
"experience_level": "INTERMEDIATE",
"preferred_skills": [],
"applications_count": 13,
"estimated_duration": 2,
"application_deadline": "2026-07-30T23:59:59.999Z"
}
],
"page": 1,
"limit": 20,
"pages": 1,
"total": 2,
"has_more": false,
"source_total": 25
},
"status": "success"
}
}About the NairaGig API
What the API Returns
The list_jobs endpoint returns a paginated array of job and project postings from NairaGig's public board, ordered newest first. Each object in the jobs array includes id, title, description, source (either native for direct gigs/projects or recruiter for employer-submitted roles), job_type, status, budget_type, budget_min, budget_max, and currency. Recruiter postings additionally carry salary_cycle and employment_type fields. Alongside the jobs array, the response returns pagination metadata: page, limit, pages, total, has_more, and source_total.
Filtering and Pagination
Requests accept four optional parameters. job_type filters by posting category — jobs and projects vs. local service requests — applied at the source level, reflected in source_total. experience_level similarly narrows results at the source level. The search parameter performs keyword matching against posting text on all supplied words; when used, total reflects the post-keyword count while source_total reflects the unfiltered site count. Page size is controlled by limit (clamped at 50) and page (1-based); has_more indicates whether additional pages exist.
Coverage and Scope
NairaGig is a Nigerian freelance and job marketplace, so postings are predominantly Nigeria-focused, with pay amounts in Nigerian Naira (NGN) by default. The board mixes short-term freelance gigs, ongoing projects, and salaried recruiter postings in a single feed, distinguished by the source field. The budget_min/budget_max pair covers both fixed-price budgets and salary bands depending on the posting type.
The NairaGig API is a managed, monitored endpoint for nairagig.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when nairagig.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 nairagig.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 Nigerian freelance gigs by experience level to build a localized job alert service.
- Compare budget_min/budget_max ranges across job_type categories to analyze Nigerian freelance market rates.
- Filter recruiter postings by employment_type and salary_cycle to surface full-time salaried roles separately from gig work.
- Keyword-search postings using the search param to find tech-stack-specific gigs (e.g., 'React', 'Django').
- Track source_total over time to monitor the growth or contraction of active listings on NairaGig.
- Ingest newest-first postings via has_more pagination to maintain a near-real-time gig feed for a job board aggregator.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does NairaGig have an official developer API?+
How does the source field distinguish posting types?+
source field set to either native (gigs and projects posted directly by freelancers or clients on NairaGig) or recruiter (employer-submitted job listings). Recruiter postings also carry salary_cycle and employment_type fields that native postings omit.Does the search parameter match against all posting fields?+
search parameter matches keywords against posting text. All words in the search string must appear for a posting to be included. The response's total reflects the keyword-filtered count, while source_total shows the site's unfiltered count for any site-level filters (job_type, experience_level) that were applied.Are individual posting detail pages or applicant counts available?+
list_jobs endpoint returns listing-level fields including description, pay range, and experience level, but does not expose individual posting detail pages, applicant counts, or skills tag lists as separate structured fields. You can fork this API on Parse and revise it to add a detail endpoint that surfaces those fields.Is this API limited to Nigeria, and are other currencies supported?+
currency field is returned per posting, so if a listing specifies a different currency that information will be present, but non-NGN postings are rare. The API covers only NairaGig's board and does not aggregate other regional freelance platforms. You can fork it on Parse and revise to add coverage from additional sources.