{"title":"Paginate - Liquid Tag Reference","slug":"paginate-tag-reference","url":"https://support.storeconnect.com/articles/paginate-tag-reference","url_markdown":"https://support.storeconnect.com/articles/paginate-tag-reference.md","subtitle":null,"summary":"The `paginate` block tag wraps a PaginatedList so it fetches and returns results. Without it, looping over a PaginatedList silently returns zero items.","type":"Developer_Documentation","video_url":"","keywords":"liquid, tags, paginate, block tag, storeconnect, pricebook_entries, PaginatedList","last_modified":"2026-08-21T07:12:35+0000","body_markdown":"The `paginate` block tag wraps a `PaginatedList` collection so it actually fetches and returns results, in pages of a given size. Certain Liquid globals (for example `pricebook_entries` on `current_pricebook`) return a `PaginatedList` rather than a plain array, and require this wrapping to yield any items at all.\n\n## Syntax\n\n\n```liquid\n\n{% paginate collection by page_size %}\n  {% for item in collection %}\n    \u003c!-- Content here --\u003e\n  {% endfor %}\n{% endpaginate %}\n```\n\n\n| Property | Value |\n|----------|-------|\n| **Tag Name** | `paginate` |\n| **Type** | Block tag |\n| **Source** | Hydrofoil (core) |\n| **Arguments** | `collection` — the `PaginatedList` to page through. `page_size` — the number of items to return per page (after `by`). |\n\n## Description\n\n`paginate` takes a `PaginatedList` and a page size, and makes that many items available to a loop inside the block. Loop over the **same collection name** you passed to `paginate`; there is no separate `.items` accessor to unwrap:\n\n\n```liquid\n\n{%- paginate current_pricebook.pricebook_entries by 20 -%}\n  {%- for entry in current_pricebook.pricebook_entries -%}\n    {%- assign product = entry.product -%}\n    {{ product.name }}\n  {%- endfor -%}\n{%- endpaginate -%}\n```\n\n\n:::warning\nA `PaginatedList` does not lazily fetch results on its own. A plain `{% for %}` loop over one, without wrapping it in `paginate`, silently returns zero items rather than raising an error. Always wrap the loop in `{% paginate collection by page_size %} ... {% endpaginate %}` first.\n:::\n\nFor an example that queries and paginates a store's full product catalog, see [Build structured data feeds for AI answer engines](aeo-geo-structured-data-feeds). For collections returned by the `query` tag, see [Liquid query tag reference](liquid-query)."}