On the Shopify REST Admin API, products.json returns at most 250 products per request. The default is 50. To get more, follow the cursor URL in the response’s Link header. The 25,000-object cap is a separate limit. It restricts how far array pagination can go, whatever your page size. If you need more than 25,000 matching objects, you have to narrow the query with filters or move to GraphQL bulk operations.
The two numbers, and what each one controls
| Figure | What it is | Where Shopify states it |
|---|---|---|
| 50 | Default limit for the REST products list |
REST pagination guide and Product endpoint reference |
| 250 | Maximum limit per REST request. Shopify’s wording: “The maximum limit value is 250.” |
REST pagination guide and Product endpoint reference |
| 25,000 | Ceiling on pagination of arrays of objects. Shopify’s wording: “Shopify limits pagination of arrays of objects to 25,000 objects.” | GraphQL pagination guide and API limits page |
| 25,001 | The value a count query returns to signal the actual count exceeds the cap | GraphQL pagination guide |
The 250 figure is only a page size. A full traversal can span many pages, up to the overall cap. At 250 per page, 25,000 objects is 100 pages. Shopify says counts are accurate through 25,000. Above that, a count query returns 25,001 rather than the true total, so treat that value as “more than 25,000”, not as an exact number.
As an Amazon Associate I earn from qualifying purchases.
This article covers the Admin API endpoint. The figures come from Shopify’s documentation as read in 2026, not from tests against a live store. Your token’s access scopes and the API version you pin can change what you see, so check the versioned reference for your target version.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
How to paginate with the Link header
REST pagination is cursor-based. The legacy page parameter returns an error, so you can’t compute page numbers.
#1 Best Overall
- Send the first request to a versioned path, such as
/admin/api/{api_version}/products.json?limit=250. Choose and verify the version for your app. - Put every filter you need in this first request. Shopify’s guide advises this.
- Read the response’s
Linkheader. It carries arel="next"URL and, where applicable, arel="previous"URL. - Request the
nextURL exactly as given. Don’t editpage_infoand don’t add or change other parameters by hand. - Stop when a response has no
nextlink.
Shopify says these link URLs are temporary and are meant only for use with the response that produced them. Don’t store them for later runs. If you need to resume a job, restart from a fresh first request.
url = f"https://{shop}/admin/api/{version}/products.json?limit=250&status=active"
while url:
resp = http_get(url, headers={"X-Shopify-Access-Token": token})
handle(resp.json()["products"])
url = resp.links.get("next", {}).get("url") # follow as-is
The example uses status=active only to show a filter in the first request. Check the endpoint reference for the filters your API version supports.
Rank #2
What happens past 25,000
Under Shopify’s documented cap, ordinary pagination cannot enumerate more than 25,000 matching objects. Shopify points to two remedies.
Narrow the dataset with filters
Split a large catalog into slices that each stay well below the cap, then paginate each slice separately. Shopify recommends filters to keep paginated sets manageable. Range filters have a pitfall. On a sufficiently large collection, a range search can time out or error when the search field differs from the sort order. Shopify’s remedy is to make the sort key match the range field.
Rank #3
Use GraphQL bulk queries
Shopify’s documented route for volumes beyond ordinary pagination is the GraphQL Admin API bulk query operation. It fits full-catalog exports and syncs better than a long loop of page requests.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Why new work should target GraphQL
Shopify states: “The REST Admin API is a legacy API as of October 1, 2024.” It directs developers to build with the GraphQL Admin API. Since April 1, 2025, new public apps must use GraphQL exclusively. An existing REST integration can keep working, but a new public app can’t be built on REST.
Rank #4
| Axis | REST Admin API | GraphQL Admin API |
|---|---|---|
| Status | Legacy since October 1, 2024 | Shopify’s recommended API |
| Max page size | 250 (limit) |
250 resources per request (first) |
| Continuation | Link header with opaque page_info |
after with the previous page’s endCursor, plus PageInfo |
| Beyond 25,000 | Filter into smaller slices | Filters, or bulk query operations |
The 25,000-object pagination limit is documented in Shopify’s GraphQL pagination guide, so GraphQL connections face the same ceiling. Bulk operations are how you get past it.
Quick Recap
Checklist
- Set
limit=250to minimize requests, because the default is only 50. - Never build
page=parameters or editpage_info. - Apply filters and sorting in the first request only.
- Treat a count of 25,001 as “over the cap”.
- If a range filter times out, align the sort key with the filtered field.
- For new apps or catalogs near the cap, plan on GraphQL and bulk queries.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




