Manual Fruit Count

Retrieve manual fruit count measurements by orchard and date, including individual sample positions and optional bunch detail.

Use these endpoints to retrieve fruit count data collected from manual sampling in the field. The data supports two sample types:

  • Tree samples (sample_type: tree) — Returns individual fruit counts per tree, with an average fruit count across all sample positions.
  • Vine samples (sample_type: vine) — Returns bunch counts per vine and average berries per bunch.

The measurements endpoint returns data aggregated by orchard and date, while the detail endpoint includes all individual sample records with GPS coordinates for each sample position.

Recommended patterns for fetching manual fruit count data

How to fetch fruit count averages per orchard

  1. Pull per-orchard measurement dates for a given time period using the farming/truefruit/manual_fruit_count/measurements/ endpoint. The response returns a list of objects containing an orchard_id, measurement_date, and sample_type. Filter the response using the measurement_date query parameter.
  2. Review the sample_type field to determine how to interpret the averages. The average_fruit_count field returns the average number of fruit or bunches counted per sample position for both tree and vine samples.

How to fetch individual sample positions per orchard and date

  1. First pull per-orchard measurement dates using the farming/truefruit/manual_fruit_count/measurements/ endpoint as described above.
  2. Pass the orchard_id and measurement_date from the measurements response into the farming/truefruit/manual_fruit_count/measurements/{orchard_id}/{measurement_date}/ endpoint. This returns the aggregated averages along with all individual sample_positions, each with GPS coordinates (latitude, longitude) and per-position fruit counts.
  3. To include bunch-specific fields (such as average_berries_per_bunch), pass include=bunch_detail as a query parameter on the detail endpoint. Without this parameter, bunch-specific fields are not included in the response.

Optional parameters

Use include=bunch_detail on the detailed endpoint when you need bunch-specific fields in the response. Without this parameter, the response includes the standard manual fruit count detail fields only.

Fruit Count Measurement Compact

KeyTypeDescription
farm_idintegerThe unique identifier of the farm, provided by Aerobotics, which the measurement belongs to.
orchard_idintegerThe unique identifier of the orchard, provided by Aerobotics, which the measurement belongs to.
measurement_datedateThe date on which the samples were collected
sample_typestringThe type of sample: tree for individual fruit counts, vine for bunch counts
fruit_unitstringThe unit of measurement: fruit for individual fruit counts, bunch for bunch counts
average_fruit_countintegerAverage number of fruit or bunches counted per sample position
count_sample_positionsintegerNumber of samples collected

Example response

{
  "count": 2,
  "next": null,
  "previous": null,
  "results": [
    {
      "farm_id": 1234,
      "orchard_id": 5678,
      "measurement_date": "2025-11-15",
      "sample_type": "tree",
      "fruit_unit": "fruit",
      "average_fruit_count": 143,
      "count_sample_positions": 3
    },
    {
      "farm_id": 1234,
      "orchard_id": 5679,
      "measurement_date": "2025-11-15",
      "sample_type": "vine",
      "fruit_unit": "bunch",
      "average_fruit_count": 24,
      "count_sample_positions": 5
    }
  ]
}

Fruit Count Measurement Detailed

KeyTypeDescription
farm_idintegerThe unique identifier of the farm, provided by Aerobotics, which the measurement belongs to.
orchard_idintegerThe unique identifier of the orchard, provided by Aerobotics, which the measurement belongs to.
measurement_datedateThe date on which the samples were collected
sample_typestringThe type of sample: tree for individual fruit counts, vine for bunch counts
fruit_unitstringThe unit of measurement: fruit for individual fruit counts, bunch for bunch counts
average_fruit_countintegerAverage number of fruit or bunches counted per sample position
count_sample_positionsintegerNumber of samples collected
average_berries_per_bunchintegerAverage number of berries per bunch. Returned when sample_type is vine and include=bunch_detail is passed as a query parameter
sample_positions[][object]An array of individual sample records with GPS coordinates and per-position fruit counts

Sample Position Object

KeyTypeDescription
sample_position_idintegerUnique identifier of the sample position
sample_typestringThe type of sample: tree for individual fruit counts, vine for bunch counts
latitudenumberLatitude of the sample position (decimal format)
longitudenumberLongitude of the sample position (decimal format)
fruit_unitstringThe unit of measurement: fruit for individual fruit counts, bunch for bunch counts
fruit_countintegerNumber of fruit or bunches counted at this sample position
average_berries_per_bunchintegerAverage number of berries per bunch. Returned when sample_type is vine and include=bunch_detail is passed as a query parameter

Example response

{
  "farm_id": 1234,
  "orchard_id": 5678,
  "measurement_date": "2025-11-15",
  "sample_type": "tree",
  "fruit_unit": "fruit",
  "average_fruit_count": 143,
  "average_berries_per_bunch": null,
  "count_sample_positions": 3,
  "sample_positions": [
    {
      "sample_position_id": 101,
      "sample_type": "tree",
      "latitude": -33.9249,
      "longitude": 18.4241,
      "fruit_unit": "fruit",
      "fruit_count": 150,
      "average_berries_per_bunch": null
    },
    {
      "sample_position_id": 102,
      "sample_type": "tree",
      "latitude": -33.9251,
      "longitude": 18.4243,
      "fruit_unit": "fruit",
      "fruit_count": 138,
      "average_berries_per_bunch": null
    },
    {
      "sample_position_id": 103,
      "sample_type": "tree",
      "latitude": -33.9253,
      "longitude": 18.4245,
      "fruit_unit": "fruit",
      "fruit_count": 140,
      "average_berries_per_bunch": null
    }
  ]
}