Feeds
List feeds, get feed status, and browse transformed feed products with applied rules and mappings.
A feed is an independently configured product data output. Each feed has its own rules, settings, column mappings, and published URL. Every shop starts with a primary feed and can create additional feeds for different languages or markets.
Feed types
| Type | Description |
|---|---|
primary | The default feed created when you install the app. Every shop has exactly one. |
language | A translation feed for a specific locale (e.g., French, German). Uses Shopify’s translation data. |
market | A feed targeting a specific market with independent product selection and configuration. |
List feeds
/v1/feeds Returns all active feeds for your shop.
Required scope: read_feeds
Request
curl https://app.simpleproductfeeds.com/v1/feeds \
-H "Authorization: Bearer spf_live_sk_your_key_here"
Response
{
"data": [
{
"id": "feed_1",
"object": "feed",
"feed_type": "primary",
"locale": null,
"display_name": "Primary",
"feed_url": "https://feeds.simpleproductfeeds.com/abc123/gmcfeed.txt",
"product_count": 1482,
"last_run_at": "2026-03-09T14:30:00Z",
"created_at": "2026-01-10T08:00:00Z"
},
{
"id": "feed_2",
"object": "feed",
"feed_type": "language",
"locale": "fr",
"display_name": "French",
"feed_url": "https://feeds.simpleproductfeeds.com/abc123/gmcfeed-fr.txt",
"product_count": 1482,
"last_run_at": "2026-03-09T14:30:00Z",
"created_at": "2026-02-15T10:00:00Z"
},
{
"id": "feed_3",
"object": "feed",
"feed_type": "market",
"locale": null,
"display_name": "Canada Feed",
"feed_url": "https://feeds.simpleproductfeeds.com/abc123/gmcfeed-canada-feed.txt",
"product_count": 850,
"last_run_at": "2026-03-09T14:30:00Z",
"created_at": "2026-03-01T12:00:00Z"
}
]
}
Response fields
| Field | Type | Description |
|---|---|---|
id | string | Unique identifier with feed_ prefix. |
object | string | Always "feed". |
feed_type | string | Feed type: "primary", "language", or "market". |
locale | string | null | ISO locale code for language feeds (e.g., "fr", "de"). Null for primary and market feeds. |
display_name | string | Human-readable name for the feed. |
feed_url | string | null | Public URL of the feed output file. Null if never generated. |
product_count | integer | Number of products in this feed. |
last_run_at | string | null | ISO 8601 timestamp of the last successful run. |
created_at | string | ISO 8601 timestamp when the feed was created. |
Get a feed
/v1/feeds/:id Returns a feed’s current status, product count, public feed URL, and last generation details.
Required scope: read_feeds
Request
curl https://app.simpleproductfeeds.com/v1/feeds/feed_1 \
-H "Authorization: Bearer spf_live_sk_your_key_here"
The feed_ prefix is optional — both feed_1 and 1 are accepted.
Response
{
"data": {
"object": "feed",
"status": "fresh",
"product_count": 1482,
"feed_url": "https://feeds.simpleproductfeeds.com/abc123/gmcfeed.txt",
"last_generated_at": "2026-03-09T14:30:00Z",
"last_export_id": "ext_567"
}
}
Response fields
| Field | Type | Description |
|---|---|---|
object | string | Always "feed". |
status | string | Feed status: "fresh" (up to date), "generating" (extract in progress), or "never_generated" (no extracts yet). |
product_count | integer | Number of products in the active feed. 0 if no feed data exists. |
feed_url | string | null | Public URL of the feed output file. Null if never generated. |
last_generated_at | string | null | ISO 8601 timestamp of the last successful feed generation. |
last_export_id | string | null | ID of the last extract (with ext_ prefix). Null if never extracted. |
Feed status values
| Status | Description |
|---|---|
fresh | The feed is up to date. No extract is running. |
generating | An extract is currently in progress. |
never_generated | No extracts have been created yet. |
Errors
| Status | Code | Description |
|---|---|---|
| 404 | resource_not_found | No feed found with the given ID. |
List feed products
/v1/feeds/:id/products Returns transformed feed products with all rules, mappings, and transformations applied. This shows exactly what appears in your published feed, including excluded products and exclusion reasons.
Required scope: read_products
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
page | integer | 1 | Page number (minimum 1). |
per_page | integer | 25 | Results per page (maximum 100). |
search | string | — | Search transformed product data. |
sort | string | — | Column name to sort by. |
order | string | asc | Sort direction: asc or desc. |
Request
curl "https://app.simpleproductfeeds.com/v1/feeds/feed_1/products?page=1&per_page=5" \
-H "Authorization: Bearer spf_live_sk_your_key_here"
Response
{
"data": [
{
"object": "feed_product",
"excluded": false,
"excluded_reason": null,
"fields": {
"id": "shopify_US_8012345678901_44012345678901",
"title": "Blue T-Shirt - Medium",
"description": "A comfortable blue cotton t-shirt.",
"link": "https://my-store.myshopify.com/products/blue-t-shirt?variant=44012345678901",
"image_link": "https://cdn.shopify.com/s/files/1/example/shirt-blue.jpg",
"price": "29.99 USD",
"sale_price": "29.99 USD",
"availability": "in_stock",
"brand": "My Brand",
"google_product_category": "Apparel & Accessories > Clothing > Shirts & Tops"
}
},
{
"object": "feed_product",
"excluded": true,
"excluded_reason": "Out of stock",
"fields": {
"id": "shopify_US_8012345678902_44012345678902",
"title": "Red T-Shirt - Large",
"availability": "out_of_stock"
}
}
],
"meta": {
"page": 1,
"per_page": 5,
"total": 1482,
"total_pages": 297,
"has_more": true
}
}
Response fields
| Field | Type | Description |
|---|---|---|
object | string | Always "feed_product". |
excluded | boolean | Whether this product is excluded from the feed by a rule. |
excluded_reason | string | null | Reason for exclusion, if excluded. |
fields | object | All feed column values for this product after transformations are applied. |
Errors
| Status | Code | Description |
|---|---|---|
| 404 | resource_not_found | No feed found with the given ID. |
| 422 | no_feed | No feed data has been generated for this feed yet. |