Plant identification API avatar

Plant identification API

Pricing

from $8.00 / 1,000 plant identification / diseases / varieties / = gpus

Go to Apify Store
Plant identification API

Plant identification API

Identify plant from a photo, return potential species, diseases or pathogens Up to 85000 species

Pricing

from $8.00 / 1,000 plant identification / diseases / varieties / = gpus

Rating

0.0

(0)

Developer

Hugo Gresse

Hugo Gresse

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

9 days ago

Last modified

Share

Pl@ntNet Plant Identification API

Identify plants, diseases and cultivated varieties from photos, and browse the botanical reference data behind them — powered by Pl@ntNet, the citizen-science identification engine used by millions of botanists, farmers and gardeners.

No Pl@ntNet account, no API key, no quota to manage. Send an image, get ranked species back with scientific names, common names, family, genus and GBIF/POWO identifiers.

  • 🌿 84,600 species in the world flora, across 77 regional floras (Western Europe, Canada, useful plants, weeds…)
  • 🦠 Diseases and pests identified from the same kind of photo
  • 🍇 Cultivated varieties for crops and ornamentals
  • 📚 Taxonomy data: floras, species lists and 52 languages for localized common names
  • ⚡ Use it as a classic Actor run or as a live HTTP API (Standby mode)

Why Pl@ntNet

Pl@ntNet isn't a general image classifier with a plant label on it. It has been built since 2009 by four French public research institutes — Cirad, Inria, IRD and INRAE — and is trained on an observation base that a global community keeps growing and experts keep revising.

  • Over a billion identifications served; 100,000–700,000 active users a day, peaking at 1.5 million identifications
  • Observations published to GBIF and cited in 1,000+ scientific publications
  • The same engine behind the Pl@ntNet app and its Pro API (10,000+ developers)
  • Models and referentials are updated continuously — the response carries the model version it used

Quick start

Run the Actor with this input:

{
"endpoint": "identify",
"imageUrls": ["https://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/Bellis_perennis_white_%28aka%29.jpg/960px-Bellis_perennis_white_%28aka%29.jpg"],
"lang": "en",
"nbResults": 3
}

You get back the Pl@ntNet response, ranked by confidence:

{
"results": [
{
"score": 0.59113,
"species": {
"scientificName": "Bellis perennis L.",
"scientificNameWithoutAuthor": "Bellis perennis",
"genus": { "scientificName": "Bellis" },
"family": { "scientificName": "Asteraceae" },
"commonNames": ["Daisy", "English daisy", "Common daisy"]
},
"gbif": { "id": "3117424" },
"powo": { "id": "184409-1" }
}
],
"version": "2026-03-20 (7.5)"
}

organs is optional — Pl@ntNet detects the organ on its own, and you can name it (leaf, flower, fruit, bark) when you want to be explicit.

The full response lands in the dataset (one item per call) and in the key-value store record OUTPUT.

From your code

curl -X POST "https://api.apify.com/v2/acts/hugo_gresse~plantnet/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H 'Content-Type: application/json' \
-d '{"endpoint":"identify","imageUrls":["https://example.com/leaf.jpg"],"lang":"en"}'

Use it as a live HTTP API (Standby mode)

Instead of starting a run per request, call the Actor like any REST API. The routes, paths and query parameters are identical to the official Pl@ntNet API — just without api-key, which is injected for you.

# Identify a plant from local files (up to 5 images of the same individual)
curl -X POST "https://hugo-gresse--plantnet.apify.actor/v2/identify/all?lang=en&nb-results=3" \
-H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \
-F images=@leaf.jpg -F organs=leaf \
-F images=@flower.jpg -F organs=flower
# Diseases and pests
curl -X POST "https://hugo-gresse--plantnet.apify.actor/v2/diseases/identify?lang=en" \
-H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \
-F image=@sick-leaf.jpg
# Reference data
curl "https://hugo-gresse--plantnet.apify.actor/v2/projects?lang=en&token=<YOUR_APIFY_TOKEN>"
curl "https://hugo-gresse--plantnet.apify.actor/v2/species?prefix=quercus&token=<YOUR_APIFY_TOKEN>"
curl "https://hugo-gresse--plantnet.apify.actor/v2/languages?token=<YOUR_APIFY_TOKEN>"

GET / returns a usage summary, and the Endpoints tab documents every route (OpenAPI).


Input reference

FieldTypeDescription
endpointstringWhat to call: identify, diseases, projects, species, projectSpecies, languages.
imageUrlsarray1–5 public JPG/PNG URLs of the same plant. Required for identify and diseases.
organsarrayOptional. One organ per image, same order: leaf, flower, fruit or bark. Left empty, Pl@ntNet detects it.
projectstringFlora to search: all (default), k-world-flora, weurope, useful, weeds… see the projects endpoint.
langstringLanguage for common names, e.g. en, fr, es (52 available).
nbResultsintegerMaximum number of results returned.
includeRelatedImagesbooleanReturn reference images for each candidate species.
noRejectbooleanReturn results even when the photo may not be a plant.
extraParamsobjectExtra query parameters passed through as-is, e.g. {"prefix": "quercus", "pageSize": 50, "page": 1} or {"lat": 48.85, "lon": 2.35}.

Parameters are only forwarded to routes that accept them, so you can leave defaults in place without triggering Pl@ntNet validation errors.

Endpoints

endpointPl@ntNet routeWhat it returns
identifyPOST /v2/identify/{project}Ranked species with scores, names, family, GBIF/POWO ids
diseasesPOST /v2/diseases/identifyRanked diseases and pests
projectsGET /v2/projectsThe 77 floras, with species counts (add lat/lon to sort by proximity)
speciesGET /v2/speciesSpecies list, filter with prefix, paginate with pageSize/page
projectSpeciesGET /v2/projects/{project}/speciesSpecies of one flora
languagesGET /v2/languagesSupported language codes

Output

Each call produces one dataset item:

{
"endpoint": "identify",
"status": 200,
"ok": true,
"request": { "path": "/v2/identify/all", "method": "POST" },
"data": { "results": [ "…the Pl@ntNet response…" ] }
}

The raw Pl@ntNet JSON is also stored as the OUTPUT record, and the run's Output tab links to both.


Pricing

Pay per event — you are charged for what you actually call, and only when Pl@ntNet answers successfully:

EventPriceWhen
Plant / disease / variety identification$0.008Per identification request (this is the GPU inference call)
Any other call$0.0005Taxonomy, species lists, languages
Actor start$0.00005Once per run

Identifying 1,000 plants costs about $8. The Actor respects the maximum cost per run you set: once the limit is reached it stops before calling Pl@ntNet, so you are never billed past your cap.


Tips for good results

  • Up to 5 photos of the same individual in one identification — a leaf, a flower and a fruit together beat a single blurry shot.
  • Tag the organ (leaf, flower, fruit, bark) rather than relying on auto when you know it.
  • Narrow the flora with project (for example weurope) when you know where the photo was taken; accuracy goes up.
  • Photograph one plant, close, in focus, against an uncluttered background.
  • score is a confidence between 0 and 1 — treat anything low as a suggestion, not an answer.
  • Image URLs must be publicly reachable. Some hosts block server-side fetching; if a URL fails, post the file directly through the Standby API.

FAQ

Do I need a Pl@ntNet API key? No. Identification requests are covered by this Actor's pricing.

Which regions are covered? 77 floras, from k-world-flora (84,600 species) to regional ones like weurope, plus themed sets such as useful plants and weeds. Call the projects endpoint for the full list.

Can I use it without writing code? Yes — fill in the input form, run it, and export the dataset to JSON, CSV or Excel. It also connects to Make, Zapier and n8n through Apify integrations.

Is it good for bulk work? Yes; run the Actor per image, or keep the Standby endpoint warm and post images to it in a loop.


About this Actor

This is not an official Pl@ntNet product. It is an independent Actor that calls the public Pl@ntNet API — I do work on the Pl@ntNet team, which is why it stays close to the real API, but Pl@ntNet neither publishes nor supports this Actor, and nothing here should be read as an official statement from the project.

Need another route, another output shape, or a feature that isn't here? Open a thread in the Issues tab of this Actor — that's the direct line to me, and I read everything posted there.

Identification results, taxonomy and imagery come from the Pl@ntNet API. Pl@ntNet is a joint initiative of Cirad, INRAE, Inria and IRD. Species coverage and model versions evolve as the project's data grows.