Gov APIicar.gov.in ↗
Access structured data on ICAR's landmark crop varieties: yield, maturity, recommended regions, resistance traits, and more across 31 crops and 56+ varieties.
What is the Gov API?
The ICAR Landmark Varieties API exposes structured data from India's Indian Council of Agricultural Research covering approximately 56 landmark crop varieties across fruit, vegetable, tuber, flower, plantation, spice, medicinal, and mushroom crop groups. Two endpoints — search_varieties and list_crops — let you filter by crop name or variety name and retrieve agronomic fields including yield, maturity duration, recommended regions, season, and resistance characteristics.
curl -X GET 'https://api.parse.bot/scraper/c119b398-5804-4a33-9118-4939d18a2e30/search_varieties?crop=mango' \ -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 icar-gov-in-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: ICAR Landmark Crop Varieties — discover crops, then search varieties."""
from parse_apis.icar_gov_in_api import Icar, ParseError
client = Icar()
# List all crops to discover what is available.
for crop in client.crops.list(limit=5):
print(crop.crop_group, crop.crop, f"({crop.variety_count} varieties)")
# Pick the first crop and search its varieties by name.
first_crop = client.crops.list(limit=1).first()
if first_crop is not None:
for v in client.varieties.search(crop=first_crop.crop, limit=3):
print(v.variety_name, v.yields, v.characteristics)
# Targeted variety search using a user-supplied keyword.
try:
hit = client.varieties.search(variety="ambika", limit=1).first()
except ParseError as e:
print("parse error:", e.code)
hit = None
if hit is not None:
print(hit.variety_name, hit.crop, hit.attributes)
print("exercised: crops.list / varieties.search")
Returns ICAR landmark crop varieties, one record per variety, in the order they appear on the ICAR Landmark Varieties page (a single page, one round trip, roughly 56 varieties across fruit, vegetable, tuber, flower, plantation, spice, medicinal and mushroom crops). Optional case-insensitive substring filters on crop (matched against the crop name and its crop group, e.g. 'mango' or 'vegetables') and variety (matched against the variety name); both omitted returns every variety. Each record carries the full list of bullet-point characteristics as published, plus keyword-derived subsets: yield, maturity_duration, recommended_regions, season and disease_pest_resistance (each an array of the matching characteristic sentences, empty when the site lists none for that variety) and attributes (key/value pairs parsed from 'Label: value' bullets). crop_group reflects the heading nesting of the source table. A filter that matches nothing returns an empty varieties array with count 0; total_on_site is the number of varieties on the page before filtering.
| Param | Type | Description |
|---|---|---|
| crop | string | Case-insensitive substring matched against the crop name or crop group (one shape: 'mango'). Omitted = no crop filter. |
| variety | string | Case-insensitive substring matched against the variety name (one shape: 'kufri'). Omitted = no variety filter. |
{
"type": "object",
"fields": {
"count": "number of varieties returned after filtering",
"varieties": "array of variety records: crop_group, crop, variety_name, yield (array of yield sentences), maturity_duration (array), recommended_regions (array), season (array), disease_pest_resistance (array), characteristics (all published bullet points), attributes (object of label -> value parsed from 'Label: value' bullets)",
"total_on_site": "number of varieties on the ICAR page before filtering"
},
"sample": {
"data": {
"count": 1,
"varieties": [
{
"crop": "Mango",
"yield": [
"Yield: 80-90 kg/plant"
],
"season": [],
"attributes": {
"TSS": "21°B",
"Yield": "80-90 kg/plant",
"Fruits weight": "300-350 g",
"Mangiferin content": "35.1 µg/g FW"
},
"crop_group": "Fruit Crops",
"variety_name": "CISH Ambika",
"characteristics": [
"Fruits weight: 300-350 g",
"TSS: 21°B",
"Yield: 80-90 kg/plant",
"Mangiferin content: 35.1 µg/g FW"
],
"maturity_duration": [],
"recommended_regions": [],
"disease_pest_resistance": []
}
],
"total_on_site": 56
},
"status": "success"
}
}About the Gov API
What the API covers
The API reflects the ICAR Landmark Varieties page, which documents notable varieties released by India's premier agricultural research body. Each variety record includes crop_group, crop, variety_name, yield (an array of descriptive sentences), maturity_duration (an array), and recommended regions or seasons. The dataset spans roughly 56 varieties across 31 crops, covering diverse categories such as fruits, vegetables, tubers, flowers, plantation crops, spices, medicinal plants, and mushrooms.
Endpoints and filtering
search_varieties accepts two optional query parameters: crop (case-insensitive substring matched against crop name or crop group, e.g. mango) and variety (case-insensitive substring matched against variety name, e.g. kufri). The response returns a count of matched varieties, the varieties array with full agronomic detail per record, and total_on_site so you can see how many records exist before filtering. Parameters can be combined or omitted to retrieve the full dataset.
list_crops takes no inputs and returns a flat list of all crops on the page, each with crop_group, crop, variety_count, and variety_names — an array of every landmark variety name under that crop. This endpoint is the right starting point for discovering exact crop and variety strings before passing them into search_varieties filters.
Data shape and limitations
Yield and maturity data are stored as arrays of natural-language sentences as they appear in the source, not as normalized numeric ranges. Recommended regions and seasonal timing follow the same array format. The dataset is scoped to the single Landmark Varieties page; ICAR publishes additional variety and research databases elsewhere that are not included here.
The Gov API is a managed, monitored endpoint for icar.gov.in — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when icar.gov.in 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 icar.gov.in 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?+
- Look up yield and maturity data for a specific crop variety before including it in an agronomy recommendation tool.
- Build a crop-selection filter that narrows varieties by crop group (e.g. spices or tubers) using the
cropparameter. - Populate a regional planting guide by extracting the
recommendedfield for varieties suited to specific Indian states or agro-climatic zones. - Discover all ICAR landmark variety names for a crop using
list_cropsbefore fetching full agronomic detail viasearch_varieties. - Generate a structured comparison table of maturity durations across potato varieties by filtering with
variety=kufri. - Identify disease-resistant varieties by scanning the resistance characteristics returned in variety records.
- Integrate ICAR landmark variety metadata into a farm management or seed catalog application.
| 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 ICAR provide an official developer API for its variety data?+
What does `list_crops` return, and how is it different from `search_varieties`?+
list_crops returns one record per crop — including crop_group, crop, variety_count, and an array of variety_names — but does not include agronomic detail like yield or maturity. Use it to discover exact crop and variety name strings, then pass those into search_varieties to retrieve the full per-variety records including yield, maturity_duration, and recommended region data.Are yield and maturity values returned as numbers or text?+
yield and maturity_duration are returned as arrays of descriptive sentences, mirroring how the data appears on the ICAR page. They are not normalized into numeric fields or standardized units. Parsing the numeric range out of the sentence text is left to the consuming application.