Examrace APIexamrace.com ↗
Retrieve Indian Forest Services previous-years question paper links from Examrace, grouped by exam year and subject, via a single structured endpoint.
What is the Examrace API?
The Examrace IFS API exposes 1 endpoint — list_question_papers — that returns an array of previous-years question paper links for a given IFS subject, grouped by exam year. Each response includes up to 5 fields: the papers array, the subject slug, a list of all available years on the site, and a list of any requested years that have no coverage. Subjects such as Agriculture or Botany can be queried with optional year filtering.
curl -X GET 'https://api.parse.bot/scraper/ffcea1ef-bf73-4bf5-82b3-97eeed1231aa/list_question_papers?years=2011%2C2012%2C2013%2C2014%2C2015%2C2016%2C2017%2C2018%2C2020%2C2022%2C2023%2C2024&subject=Agriculture' \ -H 'X-API-Key: $PARSE_API_KEY'
Returns the IFS previous-years question paper links published on Examrace for one subject, grouped by exam year. One page fetch per call; no pagination. Each row in papers is one paper link (a year may have several papers, e.g. Paper 1 and Paper 2, or a single 'Part 1 to 2' link). available_years lists every year the site publishes for the subject (newest first). When years is supplied, papers contains only those years and years_not_available names the requested years the site has no papers for; an empty papers array with all requested years in years_not_available is a valid result. A subject the site does not have returns a not-found input error.
| Param | Type | Description |
|---|---|---|
| years | string | Comma-separated list of 4-digit exam years to keep, e.g. 2011,2012,2020. The scraper splits on commas — do NOT pass an array. Omitted = all years the site publishes. |
| subject | string | IFS subject slug as it appears in the Examrace subject path, e.g. Agriculture or Botany (letters, digits and hyphens). |
{
"type": "object",
"fields": {
"papers": "array of paper links, each with year (4-digit string), title (link text) and url (absolute paper page URL)",
"subject": "subject slug the papers belong to",
"available_years": "array of 4-digit year strings the site publishes for this subject, newest first",
"years_not_available": "array of requested years (from years) with no papers on the site; empty when years is omitted"
},
"sample": {
"data": {
"papers": [
{
"url": "https://www.examrace.com/IFS/IFS-Previous-Years-Papers/Agriculture/IFS-Agriculture-2006.html",
"year": "2006",
"title": "IFS Agriculture 2006"
},
{
"url": "https://www.examrace.com/IFS/IFS-Previous-Years-Papers/Agriculture/IFS-Agriculture-Paper-1-2020.html",
"year": "2020",
"title": "IFS Agriculture Paper 1.2020"
},
{
"url": "https://www.examrace.com/IFS/IFS-Previous-Years-Papers/Agriculture/IFS-Agriculture-Paper-2-2024.html",
"year": "2024",
"title": "IFS Agriculture Paper 2.2024"
}
],
"subject": "Agriculture",
"available_years": [
"2024",
"2023",
"2022",
"2021",
"2020",
"2018",
"2017",
"2016",
"2015",
"2014",
"2013",
"2012",
"2011",
"2010",
"2009",
"2006",
"2005",
"2004",
"2002",
"2001",
"2000"
],
"years_not_available": [
"2003",
"2007",
"2008"
]
},
"status": "success"
}
}About the Examrace API
What the API returns
The list_question_papers endpoint returns structured data about Indian Forest Services (IFS) previous-years exam papers published on Examrace. The core papers array contains one object per paper link, each with a year (4-digit string), title (the link text as it appears on the page, e.g. "Agriculture Paper 1" or "Agriculture Part 1 to 2"), and url (the absolute URL to the paper page on Examrace). A single year may have multiple entries if the exam split into Paper 1 and Paper 2.
Filtering by subject and year
The subject parameter accepts an IFS subject slug matching the path segment used on Examrace, such as Agriculture, Botany, or Forestry. The years parameter accepts a comma-separated list of 4-digit years (e.g. 2011,2015,2020) to narrow the result set. The response always includes available_years — the full list of years the site publishes for that subject, ordered newest first — so you can discover valid year values before filtering. The years_not_available field lists any years you requested that had no matching papers; it is an empty array when years is omitted.
Coverage and pagination
One API call covers the full subject listing page without pagination — all available years for a subject are returned in a single response. Coverage depends on what Examrace has published for each subject; some subjects have papers from the late 2000s through recent years, while others may have a narrower range. The available_years field is the authoritative indicator of what is actually on the site for a given subject.
The Examrace API is a managed, monitored endpoint for examrace.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when examrace.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 examrace.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?+
- Build a study resource index that maps IFS exam years to their Agriculture or Botany paper URLs
- Check which years are available for a subject before constructing a filtered query using the
available_yearsfield - Detect gaps in a study archive by comparing
years_not_availableagainst a target year list - Aggregate paper links across multiple subjects by calling
list_question_papersonce per subject slug - Surface the latest IFS paper URLs for a subject by reading the first entry in
available_yearsand filtering accordingly - Generate a year-by-year paper directory linking out to individual Examrace paper pages via the
urlfield
| 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 Examrace have an official developer API?+
What does the `papers` array actually contain, and how are multi-paper years handled?+
papers corresponds to one link on the Examrace subject page, with year, title, and url fields. When an exam year had two separate papers (e.g. Paper 1 and Paper 2), they appear as two distinct objects with the same year value. When the site bundles them as a single link (e.g. "Part 1 to 2"), only one object appears for that year.Does the API return the full question paper text or PDF content?+
title, url, and year — for each listing. It does not fetch or return the content of the linked paper pages. You can fork this API on Parse and revise it to add an endpoint that fetches individual paper page content.Is there a way to list all available IFS subjects, not just query one at a time?+
subject parameter and exposes available_years for that subject. There is no endpoint that enumerates all valid subject slugs. You can fork it on Parse and revise to add a subject-discovery endpoint.How should I handle a year I requested that returns no papers?+
years_not_available array listing any years from your years parameter that had no matching papers on the site. Cross-referencing this with available_years tells you exactly which years exist for the subject and which do not.