How it works
Shelfforce uses a multi-step vision pipeline to analyze shelf images:- Extraction — Identifies unique SKUs visible on the shelf.
- Product Detail — Determines facing counts and shelf positions for each product.
- Price Attribution — Reads all price tags and matches them to the correct products using spatial reasoning.
- Summary — Computes brand-level share-of-shelf metrics and totals.
The analysis lifecycle
Analysis is asynchronous. Here is exactly what happens from submission to results:Step 1: Submit an image
Send aPOST request to the analyses endpoint with the URL of a shelf image:
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
imageUrl | string | Yes | Publicly accessible URL of the shelf image. JPEG, PNG, and WebP are supported. |
placeId | string | No | Shelfforce place ID to associate with this analysis. |
taskId | string | No | Shelfforce task ID to associate with this analysis. |
externalId | string | No | Your own reference ID (e.g., customer ID, campaign ID). Returned in responses and webhook payloads. Filterable via the list analyses endpoint. |
metadata | object | No | Arbitrary key-value pairs (max 10 keys, string values, 500 chars each). Returned in responses and webhook payloads. |
callbackUrl | string | No | HTTPS URL to receive a POST when this analysis completes or fails. See Callback URLs. |
Response
The response comes back immediately. Thestatus is processing while the analysis runs.
One credit is consumed per analysis submission. See Credits for details.
Step 2: Get the results
Option A: Polling
Poll the analysis endpoint until the status iscompleted:
Option B: Webhooks
Register a webhook foranalysis.completed and Shelfforce will POST the result to your URL as soon as processing finishes. No polling needed.
generationId:
Option C: Callback URL
Pass acallbackUrl when submitting an analysis to receive a one-off POST when it completes — no webhook registration needed.
callbackSecret you can use to verify the callback signature:
List analyses
Query your analyses with filters usingGET /api/v1/analyses:
| Parameter | Type | Description |
|---|---|---|
externalId | string | Filter by your external reference ID. |
status | string | Filter by status: processing, completed, failed. |
placeId | string | Filter by place ID. |
cursor | string | Pagination cursor from a previous response. |
limit | integer | Max results per page (default 50, max 100). |
Completed response
Step 3: Work with product data
Product fields
Each product in theproducts array includes:
| Field | Type | Description |
|---|---|---|
id | string | Unique product detection identifier |
sku | string | null | Matched SKU from your inventory, if identified |
brand | string | Detected brand name |
description | string | Full product description as detected on shelf |
category | string | null | Product category |
subcategory | string | null | Product subcategory |
price | number | null | Detected shelf price. Null if no price tag was found |
discountedPrice | number | null | Promotional/sale price if on sale |
currency | string | null | ISO 4217 currency code |
onSale | boolean | null | Whether the product appears to be on promotion |
units | number | Number of visible facings on the shelf |
confidence | number | null | Detection confidence score (0.0 to 1.0) |
shelfPosition | string | null | Vertical position: top, eye-level, middle, bottom |
fixtureType | string | null | Where the product was found: shelf, fridge, floor-display, other |
Query products across analyses
To retrieve products across multiple analyses, use the products endpoint with optional filters:Step 4: View reports
Query aggregated share-of-shelf reports:Image requirements
For best results, follow these guidelines when capturing shelf images:Do
- Capture the full shelf section in frame
- Ensure products and price tags are legible
- Use good lighting with minimal glare
- Shoot from directly in front of the shelf
Avoid
- Blurry or out-of-focus images
- Extreme angles that distort product labels
- Heavy shadows or reflections obscuring products
- Partial shelf captures that cut off products
Analysis statuses
| Status | Description |
|---|---|
processing | The analysis is running. Poll again or wait for a webhook. |
completed | The analysis finished successfully. Products and summary are available. |
failed | The analysis could not produce results. Check the error field for details. |
Next steps
Batch Analysis
Process up to 20 images in a single request.
Webhooks
Get notified when analyses complete instead of polling.
Field Operations
Assign shelf audits to field reps and track compliance.
Agent Integration
Connect Shelfforce to AI agents and automated pipelines.