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. |
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:
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. |