Skip to main content

🔍 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:

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;

🚀 Basic Usage

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.