> **For coding agents and LLMs:** This is one Social Fetch marketing page (markdown export). For API orientation start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for auth and crawl rules use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for every operation use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt).

## This page

- **On-site (HTML):** <https://www.socialfetch.dev/platforms/shopify/search>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/platforms/shopify/search.mdx>

---

# Shopify Search API

The store's own search results across products, articles and pages.

`GET /v1/shopify/search?store=…&query=shirt` returns `data.query`, the `type` array that was searched, `totalCount`, `totalCountCapped`, `products`, `articles`, `pages`, `filters` and `page`.

Pass `type=product`, `article` or `page` to narrow the search. Add `available`, `priceMin` or `priceMax` for products, and `limit` and `cursor` to page. Product hits can carry `id` null when the store's search answer omits it, but `handle` and `title` are always present.

The store caps its own `totalCount` at 1,000. `totalCountCapped` is true when that cap was reached, so the count is a lower bound.

## Request

- **Endpoint:** `GET /v1/shopify/search`
- **Credits:** 1 credit
Failed requests are free
- **Input:** by store and query
- **Full reference:** [docs](https://www.socialfetch.dev/docs/api/v1/shopify/search/get)
- **Platform page:** [/platforms/shopify](https://www.socialfetch.dev/platforms/shopify)

## FAQ

### Why is totalCountCapped true?

The store caps its search count at 1,000. The number is a lower bound, not the full number of matches.

### Why is a product id null in a search hit?

The store's search answer omitted it. Use handle and title to identify the hit, then call the product route for the full record.

### Does search include articles and pages?

Yes, by default it searches all three types. Pass type to keep one.

### Are prices in the store's currency?

Yes. Pass country to read a market where the store supports it.

### How do I name the store?

The store is the domain, for example allbirds.com, www.allbirds.com or weareallbirds.myshopify.com. A full URL is reduced to its host.

### How is it billed?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth. Each paginated page is a separate billed request.

### What does lookupStatus mean?

found means the lookup succeeded. not_found means the store or entity does not exist or is not a Shopify store. private means the storefront is password-protected. restricted means it is paused or frozen. HTTP 200 only means the request finished, so branch on lookupStatus.
