{"id":7811,"date":"2025-08-01T16:17:06","date_gmt":"2025-08-01T16:17:06","guid":{"rendered":"https:\/\/www.leadshook.com\/help\/?p=7811"},"modified":"2025-09-04T09:12:15","modified_gmt":"2025-09-04T09:12:15","slug":"query-data-from-supabase","status":"publish","type":"post","link":"https:\/\/www.leadshook.com\/help\/query-data-from-supabase\/","title":{"rendered":"How to Query Data from Supabase"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Supabase allows large datasets and can perform very fast lookup via their built-in API tools.<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 1: Set up your Supabase project<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sign up or log in at supabase.com<\/li>\n\n\n\n<li>Click &#8220;New Project&#8221; and fill in your project details<\/li>\n\n\n\n<li>Select your region and set a secure password<\/li>\n\n\n\n<li>Wait for your database to be provisioned (usually takes 1-2 minutes)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 2: Upload your CSV<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Navigate to the &#8220;Table Editor&#8221; in the left sidebar<\/li>\n\n\n\n<li>Click &#8220;Create a new table&#8221; or select an existing table (Recommended to use lowercase and use an underscore to separate words e.g. table_name or column_name)<\/li>\n\n\n\n<li>For new CSV upload: Click &#8220;Import data from CSV&#8221; (Recommended to have a unique identifier column like row_id)<\/li>\n\n\n\n<li>Upload your CSV file, Review the column types and adjust if needed<\/li>\n\n\n\n<li>Confirm the import<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 3: Find the API details and request URL<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to &#8220;Project Settings&#8221; (gear icon in the bottom left)<\/li>\n\n\n\n<li>Click on &#8220;Data API&#8221; in the settings sidebar<\/li>\n\n\n\n<li>Copy your project URL from the &#8220;Project URL&#8221; field<\/li>\n\n\n\n<li>Find your API keys in the &#8220;API Keys&#8221; sidebar under Project Settings<\/li>\n\n\n\n<li>Use the &#8220;anon&#8221; (public) key for client-side requests<\/li>\n\n\n\n<li>Use the &#8220;service_role&#8221; key for server-side requests (keep this secure)<\/li>\n<\/ul>\n\n\n\n<p><strong>Sample Request URL<\/strong>:<br>https:\/\/<strong>&lt;your_project_id&gt;<\/strong>.supabase.co\/rest\/v1\/<strong>&lt;table_name&gt;<\/strong>?<strong>&lt;table_column&gt;<\/strong>=eq.<strong>{zip}<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>&lt;your_project_id&gt;<\/strong> &#8211; This is your Supabase Project ID<\/li>\n\n\n\n<li><strong>&lt;table_name&gt;<\/strong> &#8211; This is the name of your table<\/li>\n\n\n\n<li><strong>&lt;table_column&gt;<\/strong> &#8211; Your table column<\/li>\n\n\n\n<li><strong>{zip}<\/strong> &#8211; Your Leadshook custom field<\/li>\n<\/ul>\n\n\n\n<p><strong>Headers:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apikey: SUPABASE_CLIENT_ANON_PUBLIC_KEY\nAuthorization: Bearer SUPABASE_SERVICE_ROLE_KEY\nContent-Type: application\/x-www-form-urlencoded<\/code><\/pre>\n\n\n\n<p><strong>Short video of setting it up:<\/strong><\/p>\n\n\n\n<div style=\"padding:62.5% 0 0 0;position:relative;\"><iframe src=\"https:\/\/player.vimeo.com\/video\/1084238874?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media\" style=\"position:absolute;top:0;left:0;width:100%;height:100%;\" title=\"How to Query Data from Supabase\"><\/iframe><\/div><script src=\"https:\/\/player.vimeo.com\/api\/player.js\"><\/script>\n\n\n\n<h2 class=\"wp-block-heading\">How to setup autocomplete lookup to your Supabase database<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step1: Follow the Steps 1 and 2 above<\/strong>.<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step2: Create your custom page node and paste this code<\/strong>. <\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>In this example, I have the table name as &#8220;my_database&#8221; and the column name as &#8220;energy_retailers&#8221;<\/strong><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE html>\n&lt;html lang=\"en\">\n&lt;head>\n    &lt;meta charset=\"UTF-8\">\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    &lt;title>Energy Retailer Lookup&lt;\/title>\n    &lt;script src=\"https:\/\/cdn.tailwindcss.com\">&lt;\/script>\n    &lt;script src=\"https:\/\/cdn.jsdelivr.net\/npm\/@supabase\/supabase-js@2.39.7\">&lt;\/script>\n    &lt;style>\n        \/* --- Added\/Updated Styles for Autocomplete --- *\/\n        .autocomplete-container {\n            position: relative;\n            width: 100%;\n        }\n\n        .autocomplete-list {\n            position: absolute;\n            top: 100%;\n            left: 0;\n            right: 0;\n            border: 1px solid #dfe1e5;\n            border-radius: 0 0 8px 8px; \/* Rounded bottom corners *\/\n            border-top: none; \/* Remove top border to connect with input *\/\n            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.08);\n            background-color: #fff;\n            z-index: 1000; \/* Ensure it's above other elements *\/\n            overflow: hidden; \/* Contain rounded corners *\/\n            margin-top: -1px; \/* Pull up to touch the input *\/\n        }\n\n        .autocomplete-item {\n            padding: 10px 12px;\n            cursor: pointer;\n            font-size: 16px; \/* Standard text size *\/\n            line-height: 24px; \/* Better readability *\/\n            border-bottom: 1px solid #eee;\n            transition: background-color 0.2s ease;\n        }\n\n         \/* Remove border from the last item *\/\n        .autocomplete-item:last-child {\n            border-bottom: none;\n        }\n\n        .autocomplete-item:hover,\n        .autocomplete-item.highlighted {\n            background-color: #f8f9fa; \/* Light grey background *\/\n        }\n\n        \/* --- Loading Indicator Styles --- *\/\n        .loading-indicator {\n            position: absolute;\n            right: 12px; \/* Position inside the input *\/\n            top: 50%;\n            transform: translateY(-50%); \/* Center vertically *\/\n            display: none; \/* Hidden by default *\/\n        }\n\n        .spinner {\n            width: 18px;\n            height: 18px;\n            border: 2px solid #f3f3f3; \/* Light grey background *\/\n            border-top: 2px solid #4285f4; \/* Google blue *\/\n            border-radius: 50%;\n            animation: spin 1s linear infinite;\n        }\n\n        @keyframes spin {\n            0% { transform: rotate(0deg); }\n            100% { transform: rotate(360deg); }\n        }\n        \/* --- End of Added\/Updated Styles --- *\/\n    &lt;\/style>\n&lt;\/head>\n&lt;body class=\"bg-gradient-to-br from-blue-50 to-blue-100\">\n    &lt;div class=\"container-center\">\n        &lt;div class=\"bg-white shadow-2xl rounded-2xl p-8 w-full max-w-md space-y-6 transform transition-all duration-300 hover:scale-105 relative mx-auto\">\n            &lt;div class=\"text-center\">\n                &lt;h1 class=\"text-3xl font-bold text-blue-600 mb-2\">Energy Retailer Lookup&lt;\/h1>\n                &lt;p class=\"text-gray-500 text-sm\">Find your energy retailer&lt;\/p>\n            &lt;\/div>\n            &lt;!-- Wrap input and list in a container for positioning -->\n            &lt;div class=\"autocomplete-container\">\n                &lt;input\n                    type=\"text\"\n                    id=\"retailerInput\"\n                    placeholder=\"Type to search energy retailers...\"\n                    class=\"w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent transition duration-300 ease-in-out\"\n                >\n                &lt;!-- Loading indicator inside the container -->\n                &lt;div class=\"loading-indicator\" id=\"loadingIndicator\">\n                    &lt;div class=\"spinner\">&lt;\/div>\n                &lt;\/div>\n                 &lt;!-- Autocomplete list inside the container -->\n                &lt;div id=\"retailerList\" class=\"autocomplete-list hidden\">&lt;\/div>\n            &lt;\/div>\n            &lt;button id=\"forwardButton\" type=\"submit\" onclick=\"logSelection()\" class=\"w-full bg-blue-500 text-white font-bold py-3 rounded-lg hover:bg-blue-600 transition duration-300 hidden\">Continue&lt;\/button>\n        &lt;\/div>\n    &lt;\/div>\n    &lt;script>\n        \/\/ Initialize Supabase\n        const supabaseUrl = '<strong>YOUR_SUPABASE_URL<\/strong>';\n        const supabaseKey = '<strong>YOUR_SUPABASE_API_KEY_ANON_PUBLIC<\/strong>';\n        const supabase = window.supabase.createClient(supabaseUrl, supabaseKey);\n\n        \/\/ Debug: Check if Supabase is initialized\n        console.log('Supabase initialized:', supabase ? 'Yes' : 'No');\n        console.log('Supabase URL:', supabaseUrl);\n        console.log('Supabase Key set:', supabaseKey ? 'Yes' : 'No');\n\n        const retailerInput = document.getElementById('retailerInput');\n        const retailerList = document.getElementById('retailerList');\n        const forwardButton = document.getElementById('forwardButton');\n        \/\/ Reference the loading indicator correctly\n        const loadingIndicator = document.getElementById('loadingIndicator');\n\n        \/\/ For debouncing\n        let debounceTimeout;\n        const debounceDelay = 300; \/\/ milliseconds\n\n        \/\/ For keyboard navigation\n        let highlightedIndex = -1;\n\n        \/\/ Track if the selected retailer is valid (from the Supabase database)\n        let isValidRetailer = false;\n\n        \/\/ Add event listeners\n        retailerInput.addEventListener('input', handleInput);\n        retailerInput.addEventListener('keydown', handleKeyDown);\n        retailerInput.addEventListener('focus', () => {\n            if (retailerInput.value.trim().length >= 2) {\n                filterRetailers();\n            }\n        });\n\n        \/\/ Hide dropdown when clicking outside\n        document.addEventListener('click', (event) => {\n            \/\/ Check if click is outside the autocomplete container\n            if (!event.target.closest('.autocomplete-container')) {\n                 retailerList.classList.add('hidden');\n            }\n        });\n\n        function handleInput() {\n            \/\/ Clear previous debounce timeout\n            clearTimeout(debounceTimeout);\n            \/\/ Set a new debounce timeout\n            debounceTimeout = setTimeout(() => {\n                filterRetailers();\n            }, debounceDelay);\n            \/\/ Reset validity when user types\n            isValidRetailer = false;\n            toggleForwardButton();\n        }\n\n        async function filterRetailers() {\n            const query = retailerInput.value.trim();\n            highlightedIndex = -1;\n            if (query.length &lt; 2) {\n                retailerList.classList.add('hidden');\n                return;\n            }\n\n            \/\/ Show loading indicator\n            if (loadingIndicator) { \/\/ Check if element exists\n                loadingIndicator.style.display = 'block';\n            }\n            \/\/ Hide the list while loading\n            retailerList.classList.add('hidden');\n\n            try {\n                console.log('Searching for:', query);\n                \/\/ Query Supabase for retailers that match the search term\n                const { data, error, status } = await supabase\n                    .from('<strong>YOUR_SUPABASE_TABLE<\/strong>')\n                    .select('<strong>YOUR_SUPABASE_COLUMN<\/strong>')\n                    .ilike('<strong>YOUR_SUPABASE_COLUMN<\/strong>', `%${query}%`)\n                    .limit(10);\n\n                \/\/ Debug: Log the response\n                console.log('Supabase response:', { data, error, status });\n\n                if (error) {\n                    console.error('Supabase error:', error);\n                    throw error;\n                }\n\n                if (!data || data.length === 0) {\n                    console.log('No results found');\n                    displayResults(&#91;]);\n                    return;\n                }\n\n                \/\/ Transform data to match expected format\n                const results = data.map(item => &#91;item&#91;'<strong>YOUR_SUPABASE_COLUMN<\/strong>']]);\n                console.log('Transformed results:', results);\n                displayResults(results);\n            } catch (error) {\n                console.error('Error fetching data:', error);\n                displayError(`Error: ${error.message || \"Unable to fetch retailers. Please try again later.\"}`);\n            } finally {\n                \/\/ Hide loading indicator\n                if (loadingIndicator) { \/\/ Check if element exists\n                    loadingIndicator.style.display = 'none';\n                }\n            }\n        }\n\n        function displayResults(results) {\n            retailerList.innerHTML = ''; \/\/ Clear previous results\n            if (results.length > 0) {\n                results.forEach((result, index) => {\n                    const item = document.createElement('div');\n                    item.classList.add('autocomplete-item');\n                    item.textContent = result&#91;0]; \/\/ The retailer name\n                    item.dataset.index = index;\n                    item.addEventListener('click', () => {\n                        selectRetailer(result&#91;0]);\n                    });\n                    retailerList.appendChild(item);\n                });\n                retailerList.classList.remove('hidden');\n            } else {\n                 \/\/ Show \"No results\" message if needed, or just keep it hidden\n                 \/\/ For now, we'll keep it simple and just hide if no results after loading\n                 retailerList.classList.add('hidden');\n            }\n        }\n\n        function displayError(message) {\n            retailerList.innerHTML = '';\n            const item = document.createElement('div');\n            item.classList.add('autocomplete-item');\n            item.textContent = message;\n            item.style.color = '#666';\n            item.style.fontStyle = 'italic';\n            retailerList.appendChild(item);\n            retailerList.classList.remove('hidden');\n        }\n\n        function selectRetailer(retailer) {\n            retailerInput.value = retailer;\n            retailerList.classList.add('hidden');\n            \/\/ Mark as valid retailer since it was selected from the list\n            isValidRetailer = true;\n            toggleForwardButton();\n             \/\/ Ensure button visibility is updated\n            if (isValidRetailer) {\n                forwardButton.classList.remove('hidden');\n            }\n        }\n\n        function toggleForwardButton() {\n            \/\/ Only show the button if we have a valid retailer from the Supabase database\n            if (isValidRetailer &amp;&amp; retailerInput.value.trim().length > 0) {\n                forwardButton.classList.remove('hidden');\n                forwardButton.disabled = false;\n            } else {\n                forwardButton.classList.add('hidden');\n                forwardButton.disabled = true;\n            }\n        }\n\n        function logSelection() {\n            console.log('Selected Retailer:', retailerInput.value);\n            \/\/ Assuming DT is defined globally elsewhere\n            if (typeof DT !== 'undefined' &amp;&amp; DT.setField) {\n                DT.setField('<strong>YOUR_LH_CUSTOM_FIELD<\/strong>', retailerInput.value);\n            } else {\n                 console.warn('DT object or setField method not found. Selection not logged.');\n            }\n        }\n\n        function handleKeyDown(e) {\n            const items = retailerList.querySelectorAll('.autocomplete-item');\n            if (retailerList.classList.contains('hidden') || items.length === 0) {\n                return;\n            }\n\n            \/\/ Down arrow\n            if (e.key === 'ArrowDown') {\n                e.preventDefault();\n                highlightedIndex = (highlightedIndex + 1) % items.length;\n                updateHighlightedItem(items);\n            }\n            \/\/ Up arrow\n            else if (e.key === 'ArrowUp') {\n                e.preventDefault();\n                highlightedIndex = (highlightedIndex - 1 + items.length) % items.length;\n                updateHighlightedItem(items);\n            }\n            \/\/ Enter\n            else if (e.key === 'Enter' &amp;&amp; highlightedIndex >= 0) {\n                e.preventDefault();\n                const retailer = items&#91;highlightedIndex].textContent;\n                selectRetailer(retailer);\n            }\n            \/\/ Escape\n            else if (e.key === 'Escape') {\n                retailerList.classList.add('hidden');\n            }\n        }\n\n        function updateHighlightedItem(items) {\n            \/\/ Remove previous highlight\n            items.forEach(item => {\n                item.classList.remove('highlighted');\n            });\n            \/\/ Add highlight to current item\n            if (highlightedIndex >= 0 &amp;&amp; highlightedIndex &lt; items.length) {\n                items&#91;highlightedIndex].classList.add('highlighted');\n                \/\/ Scroll the highlighted item into view if needed\n                items&#91;highlightedIndex].scrollIntoView({\n                    block: 'nearest'\n                });\n            }\n        }\n    &lt;\/script>\n&lt;\/body>\n&lt;\/html><\/code><\/pre>\n\n\n\n<p>Note: Replace these instances in the code:<\/p>\n\n\n\n<p>YOUR_SUPABASE_URL<br>YOUR_SUPABASE_API_KEY_ANON_PUBLIC<br>YOUR_SUPABASE_TABLE<br>YOUR_SUPABASE_COLUMN<br>YOUR_LH_CUSTOM_FIELD<\/p>\n\n\n\n<p>Short Video<\/p>\n\n\n\n<div style=\"padding:62.5% 0 0 0;position:relative;\"><iframe src=\"https:\/\/player.vimeo.com\/video\/1106458840?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" style=\"position:absolute;top:0;left:0;width:100%;height:100%;\" title=\"Autocomplete Lookup to Supabase\"><\/iframe><\/div><script src=\"https:\/\/player.vimeo.com\/api\/player.js\"><\/script>\n","protected":false},"excerpt":{"rendered":"<p>Supabase allows large datasets and can perform very fast lookup via their built-in API tools. Step 1: Set up your Supabase project Step 2: Upload your CSV Step 3: Find the API details and request URL Sample Request URL:https:\/\/&lt;your_project_id&gt;.supabase.co\/rest\/v1\/&lt;table_name&gt;?&lt;table_column&gt;=eq.{zip} Headers: Short video of setting it up: How to setup autocomplete lookup to your Supabase database [&hellip;]<\/p>\n","protected":false},"author":14,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[242,620],"tags":[535,1094,737,1085,391,829,1084,1095],"class_list":["post-7811","post","type-post","status-publish","format-standard","hentry","category-data-validation","category-scripts","tag-api","tag-csv","tag-database","tag-database-query","tag-google-sheets","tag-lookup","tag-lookup-query","tag-supabase"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to Query Data from Supabase - LeadsHook Knowledge Base<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.leadshook.com\/help\/query-data-from-supabase\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Query Data from Supabase - LeadsHook Knowledge Base\" \/>\n<meta property=\"og:description\" content=\"Supabase allows large datasets and can perform very fast lookup via their built-in API tools. Step 1: Set up your Supabase project Step 2: Upload your CSV Step 3: Find the API details and request URL Sample Request URL:https:\/\/&lt;your_project_id&gt;.supabase.co\/rest\/v1\/&lt;table_name&gt;?&lt;table_column&gt;=eq.{zip} Headers: Short video of setting it up: How to setup autocomplete lookup to your Supabase database [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.leadshook.com\/help\/query-data-from-supabase\/\" \/>\n<meta property=\"og:site_name\" content=\"LeadsHook Knowledge Base\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/leadshook\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-08-01T16:17:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-04T09:12:15+00:00\" \/>\n<meta name=\"author\" content=\"Von\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@leadshook\" \/>\n<meta name=\"twitter:site\" content=\"@leadshook\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Von\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/query-data-from-supabase\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/query-data-from-supabase\\\/\"},\"author\":{\"name\":\"Von\",\"@id\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/#\\\/schema\\\/person\\\/646557edf0c248393812c53a8ce7fe8b\"},\"headline\":\"How to Query Data from Supabase\",\"datePublished\":\"2025-08-01T16:17:06+00:00\",\"dateModified\":\"2025-09-04T09:12:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/query-data-from-supabase\\\/\"},\"wordCount\":339,\"publisher\":{\"@id\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/#organization\"},\"keywords\":[\"api\",\"csv\",\"database\",\"database query\",\"Google Sheets\",\"lookup\",\"lookup query\",\"supabase\"],\"articleSection\":[\"Data Validation\",\"Scripts\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/query-data-from-supabase\\\/\",\"url\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/query-data-from-supabase\\\/\",\"name\":\"How to Query Data from Supabase - LeadsHook Knowledge Base\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/#website\"},\"datePublished\":\"2025-08-01T16:17:06+00:00\",\"dateModified\":\"2025-09-04T09:12:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/query-data-from-supabase\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.leadshook.com\\\/help\\\/query-data-from-supabase\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/query-data-from-supabase\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Query Data from Supabase\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/#website\",\"url\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/\",\"name\":\"LeadsHook Knowledge Base\",\"description\":\"LeadsHook Training &amp; Technical Help\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/#organization\",\"name\":\"LeadsHook\",\"url\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/wp-content\\\/uploads\\\/2018\\\/12\\\/leadshook-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/wp-content\\\/uploads\\\/2018\\\/12\\\/leadshook-logo.png\",\"width\":350,\"height\":83,\"caption\":\"LeadsHook\"},\"image\":{\"@id\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/leadshook\\\/\",\"https:\\\/\\\/x.com\\\/leadshook\",\"https:\\\/\\\/www.linkedin.com\\\/showcase\\\/leadshook\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/#\\\/schema\\\/person\\\/646557edf0c248393812c53a8ce7fe8b\",\"name\":\"Von\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4d8c9fa6fa4af8da43fe4d69a7bddaddadc9d1f7fbaf9363aee7d9187dee60cd?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4d8c9fa6fa4af8da43fe4d69a7bddaddadc9d1f7fbaf9363aee7d9187dee60cd?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4d8c9fa6fa4af8da43fe4d69a7bddaddadc9d1f7fbaf9363aee7d9187dee60cd?s=96&d=mm&r=g\",\"caption\":\"Von\"},\"url\":\"https:\\\/\\\/www.leadshook.com\\\/help\\\/author\\\/voncs-leadshook-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Query Data from Supabase - LeadsHook Knowledge Base","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.leadshook.com\/help\/query-data-from-supabase\/","og_locale":"en_US","og_type":"article","og_title":"How to Query Data from Supabase - LeadsHook Knowledge Base","og_description":"Supabase allows large datasets and can perform very fast lookup via their built-in API tools. Step 1: Set up your Supabase project Step 2: Upload your CSV Step 3: Find the API details and request URL Sample Request URL:https:\/\/&lt;your_project_id&gt;.supabase.co\/rest\/v1\/&lt;table_name&gt;?&lt;table_column&gt;=eq.{zip} Headers: Short video of setting it up: How to setup autocomplete lookup to your Supabase database [&hellip;]","og_url":"https:\/\/www.leadshook.com\/help\/query-data-from-supabase\/","og_site_name":"LeadsHook Knowledge Base","article_publisher":"https:\/\/www.facebook.com\/leadshook\/","article_published_time":"2025-08-01T16:17:06+00:00","article_modified_time":"2025-09-04T09:12:15+00:00","author":"Von","twitter_card":"summary_large_image","twitter_creator":"@leadshook","twitter_site":"@leadshook","twitter_misc":{"Written by":"Von","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.leadshook.com\/help\/query-data-from-supabase\/#article","isPartOf":{"@id":"https:\/\/www.leadshook.com\/help\/query-data-from-supabase\/"},"author":{"name":"Von","@id":"https:\/\/www.leadshook.com\/help\/#\/schema\/person\/646557edf0c248393812c53a8ce7fe8b"},"headline":"How to Query Data from Supabase","datePublished":"2025-08-01T16:17:06+00:00","dateModified":"2025-09-04T09:12:15+00:00","mainEntityOfPage":{"@id":"https:\/\/www.leadshook.com\/help\/query-data-from-supabase\/"},"wordCount":339,"publisher":{"@id":"https:\/\/www.leadshook.com\/help\/#organization"},"keywords":["api","csv","database","database query","Google Sheets","lookup","lookup query","supabase"],"articleSection":["Data Validation","Scripts"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.leadshook.com\/help\/query-data-from-supabase\/","url":"https:\/\/www.leadshook.com\/help\/query-data-from-supabase\/","name":"How to Query Data from Supabase - LeadsHook Knowledge Base","isPartOf":{"@id":"https:\/\/www.leadshook.com\/help\/#website"},"datePublished":"2025-08-01T16:17:06+00:00","dateModified":"2025-09-04T09:12:15+00:00","breadcrumb":{"@id":"https:\/\/www.leadshook.com\/help\/query-data-from-supabase\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.leadshook.com\/help\/query-data-from-supabase\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.leadshook.com\/help\/query-data-from-supabase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.leadshook.com\/help\/"},{"@type":"ListItem","position":2,"name":"How to Query Data from Supabase"}]},{"@type":"WebSite","@id":"https:\/\/www.leadshook.com\/help\/#website","url":"https:\/\/www.leadshook.com\/help\/","name":"LeadsHook Knowledge Base","description":"LeadsHook Training &amp; Technical Help","publisher":{"@id":"https:\/\/www.leadshook.com\/help\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.leadshook.com\/help\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.leadshook.com\/help\/#organization","name":"LeadsHook","url":"https:\/\/www.leadshook.com\/help\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.leadshook.com\/help\/#\/schema\/logo\/image\/","url":"https:\/\/www.leadshook.com\/help\/wp-content\/uploads\/2018\/12\/leadshook-logo.png","contentUrl":"https:\/\/www.leadshook.com\/help\/wp-content\/uploads\/2018\/12\/leadshook-logo.png","width":350,"height":83,"caption":"LeadsHook"},"image":{"@id":"https:\/\/www.leadshook.com\/help\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/leadshook\/","https:\/\/x.com\/leadshook","https:\/\/www.linkedin.com\/showcase\/leadshook\/"]},{"@type":"Person","@id":"https:\/\/www.leadshook.com\/help\/#\/schema\/person\/646557edf0c248393812c53a8ce7fe8b","name":"Von","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/4d8c9fa6fa4af8da43fe4d69a7bddaddadc9d1f7fbaf9363aee7d9187dee60cd?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4d8c9fa6fa4af8da43fe4d69a7bddaddadc9d1f7fbaf9363aee7d9187dee60cd?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4d8c9fa6fa4af8da43fe4d69a7bddaddadc9d1f7fbaf9363aee7d9187dee60cd?s=96&d=mm&r=g","caption":"Von"},"url":"https:\/\/www.leadshook.com\/help\/author\/voncs-leadshook-com\/"}]}},"_links":{"self":[{"href":"https:\/\/www.leadshook.com\/help\/wp-json\/wp\/v2\/posts\/7811","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.leadshook.com\/help\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.leadshook.com\/help\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.leadshook.com\/help\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/www.leadshook.com\/help\/wp-json\/wp\/v2\/comments?post=7811"}],"version-history":[{"count":1,"href":"https:\/\/www.leadshook.com\/help\/wp-json\/wp\/v2\/posts\/7811\/revisions"}],"predecessor-version":[{"id":7812,"href":"https:\/\/www.leadshook.com\/help\/wp-json\/wp\/v2\/posts\/7811\/revisions\/7812"}],"wp:attachment":[{"href":"https:\/\/www.leadshook.com\/help\/wp-json\/wp\/v2\/media?parent=7811"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.leadshook.com\/help\/wp-json\/wp\/v2\/categories?post=7811"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.leadshook.com\/help\/wp-json\/wp\/v2\/tags?post=7811"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}