🔍 getSearchResult()
Overview
getSearchResult()
provides powerful search functionality across your Shopify store, allowing you to search for products, collections, articles, and pages with advanced filtering, sorting, and pagination capabilities.
✅ When to Use This
- Search pages with query input and filters
- Product discovery with faceted search
- Category filtering with dynamic results
- Autocomplete and typeahead functionality
- Advanced product filtering by price, availability, tags, etc.
🧩 Used with @nextshopkit/sdk
Available in both CORE and PRO tiers:
- TypeScript
- JavaScript
lib/nextshopkit/client.ts
import {
createShopifyClient,
GetSearchResultOptions,
FetchSearchResult,
} from "@nextshopkit/sdk";
const client = createShopifyClient({
shop: process.env.SHOPIFY_STORE_DOMAIN!,
token: process.env.SHOPIFY_ACCESS_TOKEN!,
apiVersion: "2025-04",
enableMemoryCache: true,
defaultCacheTtl: 300,
enableVercelCache: true,
defaultRevalidate: 60,
});
export const getSearchResult = async (
args: GetSearchResultOptions
): Promise<FetchSearchResult> => client.getSearchResult(args);
export default client;
lib/nextshopkit/client.js
import { createShopifyClient } from "@nextshopkit/sdk";
const client = createShopifyClient({
shop: process.env.SHOPIFY_STORE_DOMAIN,
token: process.env.SHOPIFY_ACCESS_TOKEN,
apiVersion: "2025-04",
enableMemoryCache: true,
defaultCacheTtl: 300,
enableVercelCache: true,
defaultRevalidate: 60,
});
export const getSearchResult = async (args) => client.getSearchResult(args);
export default client;
🚀 Basic Usage
- TypeScript
- JavaScript
import { getSearchResult } from "lib/nextshopkit/client";
// Simple search
const { data, error } = await getSearchResult({
query: "solar panels",
limit: 12,
});
if (error || !data) {
console.error("Search failed:", error);
return;
}
console.log(`Found ${data.totalCount} results for "${data.searchTerm}"`);
console.log("Products:", data.products);
console.log("Available filters:", data.availableFilters);
import { getSearchResult } from "lib/nextshopkit/client";
// Simple search
const { data, error } = await getSearchResult({
query: "solar panels",
limit: 12,
});
if (error || !data) {
console.error("Search failed:", error);
return;
}
console.log(`Found ${data.totalCount} results for "${data.searchTerm}"`);
console.log("Products:", data.products);
console.log("Available filters:", data.availableFilters);
🎯 Advanced Search with Filters
// Advanced search with filters and sorting
const searchResult = await getSearchResult({
query: "solar kit",
limit: 9,
productFilters: [
{ available: true },
{ price: { min: 100, max: 1000 } },
{ productTag: "renewable-energy" },
],
sortKey: "PRICE",
reverse: false,
types: ["PRODUCT"],
unavailableProducts: "HIDE",
});
📦 Real-World Implementation
Here's a complete search function with error handling:
lib/nextshopkit/search.ts
export const fetchSearchResults = async ({
query,
limit = 9,
filters = [],
sortKey,
reverse,
cursor,
}: {
query: string;
limit?: number;
filters?: any[];
sortKey?: "TITLE" | "PRICE" | "BEST_SELLING" | "CREATED";
reverse?: boolean;
cursor?: string;
}) => {
try {
const searchResult = await getSearchResult({
query,
limit,
...(filters.length > 0 && { productFilters: filters }),
...(sortKey && { sortKey }),
...(reverse !== undefined && { reverse }),
...(cursor && { cursor }),
types: ["PRODUCT"],
unavailableProducts: "HIDE",
});
return {
products: searchResult.products || [],
pageInfo: searchResult.pageInfo,
availableFilters: searchResult.availableFilters || [],
totalCount: searchResult.totalCount || 0,
searchTerm: searchResult.searchTerm || query,
error: searchResult.error,
};
} catch (error) {
console.error("Search error:", error);
return {
products: [],
pageInfo: null,
availableFilters: [],
totalCount: 0,
searchTerm: query,
error: "Failed to fetch search results",
};
}
};
🔍 Key Features
- Multi-type search: Products, articles, pages, collections
- Advanced filtering: Price, availability, tags, metafields, variant options
- Flexible sorting: Relevance, price, creation date, title
- Cursor pagination: Efficient pagination for large result sets
- Metafield support: Include custom metafields in search results
- Transform functions: Reshape metafield data for your UI
📊 Return Structure
{
products: Product[]; // Array of matching products
pageInfo: ProductsPageInfo; // Pagination information
availableFilters: FilterGroup[]; // Dynamic filters based on results
totalCount: number; // Total number of results
searchTerm: string; // The search query used
error: string | null; // Error message if any
}
✅ Next: Options Reference →
Description
Search for products, collections, and other resources in your Shopify store with advanced filtering, sorting, and pagination.