{"id":48872,"date":"2026-09-14T11:12:34","date_gmt":"2026-09-14T08:12:34","guid":{"rendered":"https:\/\/outscraper.com\/?p=48872"},"modified":"2026-09-14T11:59:17","modified_gmt":"2026-09-14T08:59:17","slug":"location-based-app-google-maps-data-supabase","status":"publish","type":"post","link":"https:\/\/outscraper.com\/pt\/location-based-app-google-maps-data-supabase\/","title":{"rendered":"Como criar um aplicativo baseado em localiza\u00e7\u00e3o com dados do Google Maps e o Supabase"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"48872\" class=\"elementor elementor-48872\" data-elementor-post-type=\"post\">\n\t\t\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-db9c9d7 e-flex e-con-boxed e-con e-parent\" data-id=\"db9c9d7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8f0e510 elementor-toc--minimized-on-tablet elementor-widget elementor-widget-table-of-contents\" data-id=\"8f0e510\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;exclude_headings_by_selector&quot;:[],&quot;headings_by_tags&quot;:[&quot;h2&quot;],&quot;no_headings_message&quot;:&quot;No headings were found on this page.&quot;,&quot;marker_view&quot;:&quot;numbers&quot;,&quot;minimize_box&quot;:&quot;yes&quot;,&quot;minimized_on&quot;:&quot;tablet&quot;,&quot;hierarchical_view&quot;:&quot;yes&quot;,&quot;min_height&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"table-of-contents.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-toc__header\">\n\t\t\t\t\t\t<h2 class=\"elementor-toc__header-title\">\n\t\t\t\tTable of Contents\t\t\t<\/h2>\n\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--expand\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__8f0e510\" aria-expanded=\"true\" aria-label=\"Abrir Tabela de Conte\u00fados\"><i aria-hidden=\"true\" class=\"fas fa-chevron-down\"><\/i><\/div>\n\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--collapse\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__8f0e510\" aria-expanded=\"true\" aria-label=\"Fechar Tabela de Conte\u00fados\"><i aria-hidden=\"true\" class=\"fas fa-chevron-up\"><\/i><\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<div id=\"elementor-toc__8f0e510\" class=\"elementor-toc__body\">\n\t\t\t<div class=\"elementor-toc__spinner-container\">\n\t\t\t\t<i class=\"elementor-toc__spinner eicon-animation-spin eicon-loading\" aria-hidden=\"true\"><\/i>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-a2df9d5 e-flex e-con-boxed e-con e-parent\" data-id=\"a2df9d5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ca3d028 elementor-button-success elementor-align-center gm_data_signup elementor-widget elementor-widget-button\" data-id=\"ca3d028\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-md\" href=\"https:\/\/auth.outscraper.com\/signup?redirect=\/googleMaps\" target=\"_blank\" id=\"topSignUp\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-sign-in-alt\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Join Free Tier<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-3a750624 e-flex e-con-boxed e-con e-parent\" data-id=\"3a750624\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-172e4729 elementor-widget elementor-widget-text-editor\" data-id=\"172e4729\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>To build a location-based app with Google Maps data<\/strong>, collect the business records, normalize them into your own schema, and store them in a database such as Supabase\/PostgreSQL.<\/p><p>For <strong>Google Maps data for app development<\/strong>, collecting the records is only the first step. The application still needs fields it can identify, update, query, map, and connect to its own data.<\/p><p>In this example, a small JSON sample from Outscraper\u2019s <strong>Business Catalog<\/strong>\u00a0is normalized with TypeScript and imported into Supabase\/PostgreSQL for a location-based MVP called Nomad PH.<\/p><p>The sample contains three businesses in General Luna, Siargao. Its purpose is to test the ingestion workflow, not to represent complete business coverage in Siargao or the Philippines.<\/p><p>The main task is turning the Outscraper JSON into application-ready records that can support listings, detail pages, maps, and later spatial features.<\/p><p><strong>Quick Answer: How to Use Google Maps Data in a Location-Based App<\/strong><\/p><ol><li>Collect business records with <strong>Outscraper<\/strong>.<\/li><li>Export the data as <strong>JSON<\/strong>.<\/li><li>Normalize the fields with <strong>TypeScript<\/strong>.<\/li><li>Map the records to your app schema.<\/li><li>Upsert them into <strong>Supabase\/PostgreSQL<\/strong>.<\/li><li>Use them in listings, pages, and maps.<\/li><\/ol><ol><\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-375adbb elementor-widget elementor-widget-image\" data-id=\"375adbb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/google-maps-data-to-location-app-workflow.webp\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"google-maps-data-to-location-app-workflow\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6NDkwMDAsInVybCI6Imh0dHBzOlwvXC9vdXRzY3JhcGVyLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDlcL2dvb2dsZS1tYXBzLWRhdGEtdG8tbG9jYXRpb24tYXBwLXdvcmtmbG93LndlYnAifQ%3D%3D\">\n\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"750\" height=\"422\" src=\"https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/google-maps-data-to-location-app-workflow-1024x576.webp\" class=\"attachment-large size-large wp-image-49000\" alt=\"Workflow showing how Outscraper JSON becomes records for a location-based app\" srcset=\"https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/google-maps-data-to-location-app-workflow-1024x576.webp 1024w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/google-maps-data-to-location-app-workflow-300x169.webp 300w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/google-maps-data-to-location-app-workflow-768x432.webp 768w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/google-maps-data-to-location-app-workflow-1536x864.webp 1536w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/google-maps-data-to-location-app-workflow-18x10.webp 18w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/google-maps-data-to-location-app-workflow.webp 1672w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">The workflow starts with Outscraper data and ends with structured records the application can use.<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-4d849d44 e-flex e-con-boxed e-con e-parent\" data-id=\"4d849d44\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-24de96c0 e-con-full e-flex e-con e-child\" data-id=\"24de96c0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-2b0a0a79 e-con-full e-flex e-con e-child\" data-id=\"2b0a0a79\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-47713b46 e-con-full e-flex e-con e-child\" data-id=\"47713b46\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-495c6100 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"495c6100\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">Need Business Records for Testing?<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-61ff6944 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"61ff6944\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Use Outscraper\u2019s Business Catalog to start with ready business records before building your ingestion workflow.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-16692ba2 e-con-full e-flex e-con e-child\" data-id=\"16692ba2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6b43df44 elementor-align-center elementor-widget elementor-widget-button\" data-id=\"6b43df44\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/auth.outscraper.com\/businesses?country=US\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Open Business Catalog<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-36b48c50 e-flex e-con-boxed e-con e-parent\" data-id=\"36b48c50\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-72249f46 elementor-widget elementor-widget-heading\" data-id=\"72249f46\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">What Google Maps Data Does a Location-Based App Need?<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-48947945 elementor-widget elementor-widget-text-editor\" data-id=\"48947945\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>A location app does not need every field available in a source record. It needs the fields that help the application identify a place, display useful information, and connect that place to other features.<\/p><p>For the Nomad PH MVP, the Outscraper records provided the base business and location data. The application then stored selected fields in its <span>own <\/span><code dir=\"ltr\"><span>places<\/span><\/code><span> table<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b817778 elementor-widget elementor-widget-heading\" data-id=\"1b817778\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Core place identity fields\n<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-61b0dc04 elementor-widget elementor-widget-text-editor\" data-id=\"61b0dc04\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The first group of fields answers a basic question: <strong>which place is this?<\/strong><\/p><p>For this implementation, the main identity and location fields were:<\/p><ul><li><code dir=\"ltr\"><span>name<\/span><\/code><\/li><li><code dir=\"ltr\"><span>place_id<\/span><\/code><\/li><li><code dir=\"ltr\"><span>latitude<\/span><\/code><\/li><li><code dir=\"ltr\"><span>longitude<\/span><\/code><\/li><li><code dir=\"ltr\"><span>address<\/span><\/code><\/li><li><code dir=\"ltr\"><span>business_status<\/span><\/code><\/li><\/ul><p class=\"isSelectedEnd\"><span>The <\/span><code dir=\"ltr\"><span>name<\/span><\/code><span> and <\/span><code dir=\"ltr\"><span>address<\/span><\/code><span> help users identify the business, while latitude and longitude give the application a geographic position.<\/span><\/p><p class=\"isSelectedEnd\"><span>The importer also keeps <\/span><code dir=\"ltr\"><span>place_id<\/span><\/code><span> as the external identifier used for upserts in this MVP. If the same place appears in a later import, the application can update the existing record instead of creating another one.<\/span><\/p><p><span>This does not mean <\/span><code dir=\"ltr\"><span>place_id<\/span><\/code><span> should be treated as a permanent identifier for every possible data workflow. It is simply the source identifier chosen for this implementation.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f17e1d1 elementor-widget elementor-widget-image\" data-id=\"f17e1d1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/outscraper-json-location-app-fields.webp\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"outscraper-json-location-app-fields\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6NDg5NTksInVybCI6Imh0dHBzOlwvXC9vdXRzY3JhcGVyLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDlcL291dHNjcmFwZXItanNvbi1sb2NhdGlvbi1hcHAtZmllbGRzLndlYnAifQ%3D%3D\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"750\" height=\"370\" src=\"https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/outscraper-json-location-app-fields-1024x505.webp\" class=\"attachment-large size-large wp-image-48959\" alt=\"Outscraper JSON business fields used in a location-based app\" srcset=\"https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/outscraper-json-location-app-fields-1024x505.webp 1024w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/outscraper-json-location-app-fields-300x148.webp 300w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/outscraper-json-location-app-fields-768x379.webp 768w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/outscraper-json-location-app-fields-18x9.webp 18w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/outscraper-json-location-app-fields.webp 1270w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">The source JSON contains the place identity, location, rating, and business fields mapped into the application schema.<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-61a6e965 elementor-widget elementor-widget-heading\" data-id=\"61a6e965\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Discovery and listing fields\n<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b1691df elementor-widget elementor-widget-text-editor\" data-id=\"1b1691df\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>A place page usually needs more than identity and coordinates. Users also need enough information to decide whether they want to view or visit the business.<\/p><p>The MVP stores fields such as:<\/p><ul><li>rating<\/li><li>review count<\/li><li>website<\/li><li>phone<\/li><li>business type<\/li><li>Google Maps URL<\/li><\/ul><p>These fields can support destination listings, place cards, detail pages, and filters inside the application.<\/p><p>Source categories also need some control. Instead of copying every raw subtype directly into the app, Nomad PH maps them into a smaller set of place types:<\/p><ul><li>cafe<\/li><li>coworking<\/li><li>coliving<\/li><li>hotel<\/li><li>hostel<\/li><li>restaurant<\/li><li>other<\/li><\/ul><p>A controlled list keeps the application&#8217;s categories predictable even when the source data contains several business subtypes.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6a295af8 elementor-widget elementor-widget-heading\" data-id=\"6a295af8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Keep source data separate from app-specific data<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-49c6c184 elementor-widget elementor-widget-text-editor\" data-id=\"49c6c184\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The imported business record is only one layer of the application.<\/p><p>Outscraper supplies the source business and location fields used in this MVP, such as place identity, coordinates, ratings, contact details, and business status.<\/p><p>Nomad PH keeps its own application and community data separate, including:<\/p><ul><li>Wi-Fi speed reports<\/li><li>upload speed<\/li><li>ping<\/li><li>generator observations<\/li><li>power outage observations<\/li><li>user reviews<\/li><li>verification rules<\/li><\/ul><p>That separation matters because the source record and the application&#8217;s own data have different jobs.<\/p><p>The <strong>Outscraper<\/strong> record identifies and describes the place. Nomad PH can then add its own data around that same place without treating community-generated information as part of the original Google Maps business record.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-344ccc7 e-flex e-con-boxed e-con e-parent\" data-id=\"344ccc7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a69b818 elementor-button-success elementor-align-center gm_data_signup elementor-widget elementor-widget-button\" data-id=\"a69b818\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-md\" href=\"https:\/\/auth.outscraper.com\/signup\" target=\"_blank\" id=\"topSignUp\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-sign-in-alt\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Try Outscraper for Free<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-3905e169 e-flex e-con-boxed e-con e-parent\" data-id=\"3905e169\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-64ef1fdb elementor-widget elementor-widget-heading\" data-id=\"64ef1fdb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Collect the Source Data With Outscraper Business Catalog<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1ef102a9 elementor-widget elementor-widget-text-editor\" data-id=\"1ef102a9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The first step is to collect the business records your application needs.<\/p><p>For the Nomad PH MVP, I used Outscraper\u2019s <strong>Business Catalog<\/strong> to create a small sample of businesses in General Luna, Siargao. Three records were enough to test the ingestion flow from JSON into the application database.<\/p><p>For a full walkthrough of filtering and exporting records, see the <a href=\"https:\/\/outscraper.com\/outscraper-business-catalog\/\"><strong>Outscraper Business Catalog guide<\/strong><\/a>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-24d07406 elementor-widget elementor-widget-heading\" data-id=\"24d07406\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Define the location and business type\n<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4d6745cb elementor-widget elementor-widget-text-editor\" data-id=\"4d6745cb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Start with the location and category your application needs.<\/p><p>For this MVP:<\/p><ul><li><strong>Location:<\/strong> General Luna, Siargao.\u00a0<\/li><li><strong>Business type:<\/strong> caf\u00e9s<\/li><li><strong>Source:<\/strong> Outscraper Business Catalog<\/li><li><strong>Output:<\/strong> JSON business records<\/li><\/ul><p>Keeping the sample small made it easier to inspect the source fields before building the importer.<\/p><p>For broader Google Maps data collection, Outscraper\u2019s existing <a href=\"https:\/\/outscraper.com\/google-maps-scraping-getting-started-manual-updated\/\"><strong>Google Maps Scraper guides<\/strong><\/a> cover the collection process in more detail.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5965ff1b elementor-widget elementor-widget-heading\" data-id=\"5965ff1b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Export the records as JSON\n<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-67c59e32 elementor-widget elementor-widget-text-editor\" data-id=\"67c59e32\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>For this MVP, I used a small sample from Outscraper\u2019s <strong>Business Catalog<\/strong>\u00a0instead of running a new Google Maps Scraper job. Using ready business records let me test the ingestion workflow immediately without waiting for a new scraping task to finish.<\/p><p>The same workflow can also start with JSON exported from Outscraper\u2019s <a href=\"https:\/\/outscraper.com\/google-maps-scraper\/\"><strong>Google Maps Scraper<\/strong><\/a>. In both cases, the important part is the structured business data that moves into the application.<\/p><p>JSON fit the ingestion workflow well because it was easy to:<\/p><ul><li>inspect in VS Code<\/li><li>parse with TypeScript<\/li><li>preserve nested source fields<\/li><li>pass into a normalization script<\/li><li>store the original record for later reference<\/li><\/ul><p>The JSON file then became the source input for the normalization and Supabase import steps.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-4e41399c e-flex e-con-boxed e-con e-parent\" data-id=\"4e41399c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-4a0fe6d3 e-con-full e-flex e-con e-child\" data-id=\"4a0fe6d3\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-18aa844d e-grid e-con-full e-con e-child\" data-id=\"18aa844d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7fc8ece7 elementor-widget elementor-widget-image\" data-id=\"7fc8ece7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1254\" height=\"1254\" src=\"https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/collect-google-maps-data.webp\" class=\"attachment-full size-full wp-image-49022\" alt=\"Illustration showing structured business and location data collection workflow\" srcset=\"https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/collect-google-maps-data.webp 1254w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/collect-google-maps-data-300x300.webp 300w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/collect-google-maps-data-1024x1024.webp 1024w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/collect-google-maps-data-150x150.webp 150w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/collect-google-maps-data-768x768.webp 768w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/collect-google-maps-data-12x12.webp 12w\" sizes=\"(max-width: 1254px) 100vw, 1254px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-4a627722 e-con-full e-flex e-con e-child\" data-id=\"4a627722\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e7dffe6 elementor-widget elementor-widget-heading\" data-id=\"e7dffe6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">Start With Structured Business Data<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2a12abb3 elementor-widget elementor-widget-text-editor\" data-id=\"2a12abb3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Use Outscraper\u2019s Business Catalog or Google Maps Scraper to collect the business and location records your application needs, then export them for your ingestion workflow.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-667c4b77 elementor-widget elementor-widget-button\" data-id=\"667c4b77\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/outscraper.com\/google-maps-scraper\/\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Collect Google Maps Data<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-3d85c29f e-flex e-con-boxed e-con e-parent\" data-id=\"3d85c29f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-751d152f elementor-widget elementor-widget-heading\" data-id=\"751d152f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Turn Outscraper JSON Into Application-Ready Records\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6d93d4ae elementor-widget elementor-widget-text-editor\" data-id=\"6d93d4ae\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Raw JSON is useful as a source, but an application usually needs a smaller and more predictable schema.<\/p><p>For the Nomad PH MVP, the importer reads the Outscraper JSON, selects the fields the app needs, converts them <span>into the <\/span><code dir=\"ltr\"><span>places<\/span><\/code><span> table<\/span>, and keeps the original source record for reference.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-346b65c4 elementor-widget elementor-widget-heading\" data-id=\"346b65c4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Normalize the fields the app actually needs\n<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3f83a345 elementor-widget elementor-widget-text-editor\" data-id=\"3f83a345\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The importer maps source fields into the application model instead of storing every field directly.<\/p><p>For this build, that includes values such as:<\/p><ul><li>business name<\/li><li>place ID<\/li><li>address<\/li><li>latitude<\/li><li>longitude<\/li><li>rating<\/li><li>review count<\/li><li>business status<\/li><li>website<\/li><li>phone<\/li><li>Google Maps URL<\/li><li>place type<\/li><\/ul><p>This makes the records easier to query and use inside the app.<\/p><p>The exact source field names should be checked against the real Outscraper JSON before any code example is published.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-733f9e7 elementor-widget elementor-widget-image\" data-id=\"733f9e7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/typescript-outscraper-json-normalization.webp\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"typescript-outscraper-json-normalization\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6NDg5NjAsInVybCI6Imh0dHBzOlwvXC9vdXRzY3JhcGVyLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDlcL3R5cGVzY3JpcHQtb3V0c2NyYXBlci1qc29uLW5vcm1hbGl6YXRpb24ud2VicCJ9\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"482\" src=\"https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/typescript-outscraper-json-normalization-1024x658.webp\" class=\"attachment-large size-large wp-image-48960\" alt=\"TypeScript normalizing Outscraper JSON for a location-based app\" srcset=\"https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/typescript-outscraper-json-normalization-1024x658.webp 1024w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/typescript-outscraper-json-normalization-300x193.webp 300w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/typescript-outscraper-json-normalization-768x494.webp 768w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/typescript-outscraper-json-normalization-18x12.webp 18w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/typescript-outscraper-json-normalization.webp 1400w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">The importer maps Outscraper source fields into the application's own place schema before storing the records in Supabase.<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6505a11d elementor-widget elementor-widget-heading\" data-id=\"6505a11d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Map source categories into your own app taxonomy\n<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6aa76462 elementor-widget elementor-widget-text-editor\" data-id=\"6aa76462\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Source business categories can be more detailed than the application needs.<\/p><p>Nomad PH uses a smaller internal list:<\/p><ul><li><code dir=\"ltr\"><span>cafe<\/span><\/code><\/li><li><code dir=\"ltr\"><span>coworking<\/span><\/code><\/li><li><code dir=\"ltr\"><span>coliving<\/span><\/code><\/li><li><code dir=\"ltr\"><span>hotel<\/span><\/code><\/li><li><code dir=\"ltr\"><span>hostel<\/span><\/code><\/li><li><code dir=\"ltr\"><span>restaurant<\/span><\/code><\/li><li><code dir=\"ltr\"><span>other<\/span><\/code><\/li><\/ul><ul><\/ul><p>This keeps filtering and page logic predictable.<\/p><p>For example, several source subtypes related to caf\u00e9s can still map to the same <span>internal <\/span><code dir=\"ltr\"><span>cafe<\/span><\/code><span> type. <\/span> The app controls the final category instead of depending on every raw subtype returned by the source.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3cd97b31 elementor-widget elementor-widget-heading\" data-id=\"3cd97b31\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Generate readable slugs\n\n<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3d4c21e2 elementor-widget elementor-widget-text-editor\" data-id=\"3d4c21e2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Each imported place also needs a readable URL slug.<\/p><p class=\"isSelectedEnd\"><span>For example:<\/span><\/p><p class=\"isSelectedEnd\"><code dir=\"ltr\"><span>Gaya Rooftop Space<\/span><\/code><\/p><p class=\"isSelectedEnd\"><span>becomes:<\/span><\/p><p><code dir=\"ltr\"><span>gaya-rooftop-space<\/span><\/code><\/p><p>The slug is generated during normalization so the record is ready for routes such as a place detail page.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-2f469867 e-flex e-con-boxed e-con e-parent\" data-id=\"2f469867\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-71be97e5 elementor-widget elementor-widget-heading\" data-id=\"71be97e5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Preserve the original source payload\n<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-61d4ef12 elementor-widget elementor-widget-text-editor\" data-id=\"61d4ef12\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The importer keeps two source-related fields:<\/p><ul><li><code dir=\"ltr\"><span>source = \"outscraper\"<\/span><\/code><\/li><li><code dir=\"ltr\"><span>source_payload = original JSON record<\/span><\/code><\/li><\/ul><ul><\/ul><p>Keeping the raw payload is useful because the normalized record does not include every source field.<\/p><p>It gives the application a reference point for:<\/p><ul><li>checking transformations<\/li><li>debugging import issues<\/li><li>remapping fields later<\/li><li>reviewing source values that were not added to the main schema<\/li><\/ul><p>This keeps the application schema clean without throwing away the original record.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-28596720 e-flex e-con-boxed e-con e-parent\" data-id=\"28596720\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-594552df e-con-full e-flex e-con e-child\" data-id=\"594552df\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-51348d75 e-con-full e-flex e-con e-child\" data-id=\"51348d75\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-5447acff e-con-full e-flex e-con e-child\" data-id=\"5447acff\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2652d610 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"2652d610\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">Need Programmatic Access to Google Maps Data?<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6b9ecb27 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"6b9ecb27\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Use Outscraper\u2019s Google Maps API to send business data into your own application or backend workflow without relying on manual exports.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-4bb9ee7a e-con-full e-flex e-con e-child\" data-id=\"4bb9ee7a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-354a2012 elementor-align-center elementor-widget elementor-widget-button\" data-id=\"354a2012\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/outscraper.com\/google-maps-api\/\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Use Google Maps API<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-23e0abaa e-flex e-con-boxed e-con e-parent\" data-id=\"23e0abaa\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-32c91537 elementor-widget elementor-widget-heading\" data-id=\"32c91537\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Import the Google Maps Data Into Supabase<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4a07fce1 elementor-widget elementor-widget-text-editor\" data-id=\"4a07fce1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Once the Outscraper records are normalized, the next step is to store them in the application database.<\/p><p><span>For Nomad PH, the importer sends the normalized records into a Supabase <\/span><code dir=\"ltr\"><span>places<\/span><\/code><span> table backed by PostgreSQL.<\/span><\/p><p><a href=\"https:\/\/supabase.com\/docs\/guides\/database\/overview\"><strong>Supabase provides a Postgres database<\/strong><\/a> that can be managed through its dashboard or accessed programmatically.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-28548736 e-flex e-con-boxed e-con e-parent\" data-id=\"28548736\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-40e10703 elementor-widget elementor-widget-heading\" data-id=\"40e10703\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Map the normalized data into the places table<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-585766c elementor-widget elementor-widget-text-editor\" data-id=\"585766c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The table keeps the fields the application needs for listings, routes, filtering, and later map features.<\/p><p>Important fields include:<\/p><ul><li><code dir=\"ltr\"><span>id<\/span><\/code><\/li><li><code dir=\"ltr\"><span>destination_id<\/span><\/code><\/li><li><code dir=\"ltr\"><span>neighborhood_id<\/span><\/code><\/li><li><code dir=\"ltr\"><span>name<\/span><\/code><\/li><li><code dir=\"ltr\"><span>slug<\/span><\/code><\/li><li><code dir=\"ltr\"><span>place_type<\/span><\/code><\/li><li><code dir=\"ltr\"><span>address<\/span><\/code><\/li><li><code dir=\"ltr\"><span>latitude<\/span><\/code><\/li><li><code dir=\"ltr\"><span>longitude<\/span><\/code><\/li><li><code dir=\"ltr\"><span>place_id<\/span><\/code><\/li><li><code dir=\"ltr\"><span>google_rating<\/span><\/code><\/li><li><code dir=\"ltr\"><span>google_reviews_count<\/span><\/code><\/li><li><code dir=\"ltr\"><span>business_status<\/span><\/code><\/li><li><code dir=\"ltr\"><span>website<\/span><\/code><\/li><li><code dir=\"ltr\"><span>phone<\/span><\/code><\/li><li><code dir=\"ltr\"><span>google_maps_url<\/span><\/code><\/li><li><code dir=\"ltr\"><span>source<\/span><\/code><\/li><li><code dir=\"ltr\"><span>source_payload<\/span><\/code><\/li><li><code dir=\"ltr\"><span>is_published<\/span><\/code><\/li><\/ul><ul><\/ul><p>The normalized object is mapped into this structure before the database write happens.<\/p><p>That keeps the database model consistent even if the source JSON contains more fields than the app currently uses.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c791c7b elementor-widget elementor-widget-image\" data-id=\"c791c7b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/supabase-places-table-outscraper-import.webp\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"supabase-places-table-outscraper-import\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6NDg5NjUsInVybCI6Imh0dHBzOlwvXC9vdXRzY3JhcGVyLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDlcL3N1cGFiYXNlLXBsYWNlcy10YWJsZS1vdXRzY3JhcGVyLWltcG9ydC53ZWJwIn0%3D\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"238\" src=\"https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/supabase-places-table-outscraper-import-1024x325.webp\" class=\"attachment-large size-large wp-image-48965\" alt=\"Supabase places table storing Outscraper data for a location-based app\" srcset=\"https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/supabase-places-table-outscraper-import-1024x325.webp 1024w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/supabase-places-table-outscraper-import-300x95.webp 300w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/supabase-places-table-outscraper-import-768x244.webp 768w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/supabase-places-table-outscraper-import-1536x488.webp 1536w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/supabase-places-table-outscraper-import-18x6.webp 18w, https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/supabase-places-table-outscraper-import.webp 1862w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">The normalized Outscraper records are stored in the Supabase places table before the application queries them.<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-388f980 e-flex e-con-boxed e-con e-parent\" data-id=\"388f980\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8a3e017 elementor-button-success elementor-align-center gm_data_signup elementor-widget elementor-widget-button\" data-id=\"8a3e017\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-md\" href=\"https:\/\/auth.outscraper.com\/signup?redirect=\/googleMaps\" target=\"_blank\" id=\"topSignUp\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-sign-in-alt\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Join Free Tier<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-7fe76a83 e-flex e-con-boxed e-con e-parent\" data-id=\"7fe76a83\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-559d065 elementor-widget elementor-widget-heading\" data-id=\"559d065\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Upsert instead of blindly inserting<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4d83fb56 elementor-widget elementor-widget-text-editor\" data-id=\"4d83fb56\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The importer uses an <strong>upsert<\/strong>, which updates an existing record when the same <code inline=\"\">place_id<\/code> is found or inserts a new record when it is not.<\/p><p>The importer uses <code inline=\"\">place_id<\/code> as the external identifier for this implementation.<\/p><p>The logic is simple:<\/p><ul><li>if the <code inline=\"\">place_id<\/code> already exists, update the existing record<\/li><li>if it does not exist, insert a new record<\/li><\/ul><p>This helps avoid creating duplicate place records when the same business is imported again.<\/p><p>For this MVP, <code inline=\"\">place_id<\/code> was the source identifier chosen for the upsert logic. It should not be treated as a universal rule for every application.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3da60fb0 elementor-widget elementor-widget-heading\" data-id=\"3da60fb0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Import records in batches\n<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4ef3674f elementor-widget elementor-widget-text-editor\" data-id=\"4ef3674f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The importer processes records in batches of 200.<\/p><p>That batch size was a development choice for this project, not an Outscraper requirement.<\/p><p>The same importer can work with a smaller or larger batch size depending on the application, database limits, and job size.<\/p><p>Imported records are also set as unpublished at first so they can be reviewed before appearing in the app.<\/p><p>That gives the application one more control point between source data and public content.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-459a59c5 elementor-widget elementor-widget-heading\" data-id=\"459a59c5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Use the Imported Records in Your Location-Based App<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e10e787 elementor-widget elementor-widget-text-editor\" data-id=\"e10e787\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Once the records are in Supabase, the application can use them like any other structured database content.<\/p><p>For Nomad PH, the imported places can support destination listings, individual place pages, and map-based browsing without reading directly from the original JSON file.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bc2cd20 elementor-widget elementor-widget-heading\" data-id=\"bc2cd20\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Render place cards and detail pages<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3f68b7e elementor-widget elementor-widget-text-editor\" data-id=\"3f68b7e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>A stored place record can feed different parts of the interface.<\/p><p>For example:<\/p><p class=\"isSelectedEnd\"><code dir=\"ltr\"><span>Supabase place record<\/span><\/code><br \/><span>\u2192 destination listing<\/span><br \/><span>\u2192 place card<\/span><br \/><span>\u2192 place detail page<\/span><\/p><p><strong>Next.js<\/strong> uses <a href=\"https:\/\/nextjs.org\/docs\/app\/getting-started\/layouts-and-pages\"><strong>file-based routing<\/strong><\/a>, which makes it straightforward to create a separate route for each stored place record.<\/p><p><span>Fields such as <\/span><code dir=\"ltr\"><span>name<\/span><\/code><span>, <\/span><code dir=\"ltr\"><span>slug<\/span><\/code><span>, <\/span><code dir=\"ltr\"><span>place_type<\/span><\/code><span>, <\/span><code dir=\"ltr\"><span>address<\/span><\/code><span>, rating, website, and phone can be shown where they are useful.<\/span><\/p><p>Because the data has already been normalized, the frontend does not need to understand the full Outscraper response each time it renders a place.<code dir=\"ltr\"><span><\/span><\/code><code dir=\"ltr\"><span><\/span><\/code><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1807a71 elementor-widget__width-initial elementor-widget elementor-widget-eael-image-scroller\" data-id=\"1807a71\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"eael-image-scroller.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"eael-image-scroller eael-image-scroller-vertical\">\n\t\t\t<img decoding=\"async\" src=\"https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/location-app-place-detail-page-scaled.webp\" alt=\"Location-based app place detail page using an imported Outscraper business record\">\n\t\t<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d41c0e7 elementor-widget elementor-widget-heading\" data-id=\"d41c0e7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Use coordinates for maps and spatial features<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4e6e509 elementor-widget elementor-widget-text-editor\" data-id=\"4e6e509\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"isSelectedEnd\"><span>The imported records also keep <\/span><code dir=\"ltr\"><span>latitude<\/span><\/code><span> and <\/span><code dir=\"ltr\"><span>longitude<\/span><\/code><span>.<\/span><\/p><p class=\"isSelectedEnd\"><span>Those coordinates can later support:<\/span><\/p><ul data-spread=\"false\"><li><span>map markers<\/span><\/li><li><span>geographic browsing<\/span><\/li><li><span>PostGIS geography points<\/span><\/li><li><span>nearby-place searches<\/span><\/li><\/ul><p class=\"isSelectedEnd\"><span>For this MVP, the coordinates are stored first so the records are ready for later map and spatial work.<\/span><\/p><p><span>The full PostGIS nearby-search logic sits outside the scope of this article.<\/span><\/p><p>For a broader look at how application workflows can get Google Maps data, see <a href=\"https:\/\/outscraper.com\/google-maps-api-vs-web-scraping\/\"><strong data-start=\"2266\" data-end=\"2302\">Google Maps API vs. web scraping<\/strong><\/a>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-abf41b7 elementor-widget elementor-widget-heading\" data-id=\"abf41b7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Add app-specific data on top<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4243957 elementor-widget elementor-widget-text-editor\" data-id=\"4243957\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The Outscraper record provides the business and location layer.<\/p><p>Nomad PH can then add its own data around the same place, such as:<\/p><ul><li>Wi-Fi speed reports<\/li><li>upload speed<\/li><li>ping<\/li><li>generator observations<\/li><li>power outage observations<\/li><li>user reviews<\/li><li>verification logic<\/li><\/ul><p>This keeps the source data separate from the information created inside the application.<\/p><p class=\"isSelectedEnd\"><span>The result is a simple data model:<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6ab267f elementor-widget elementor-widget-shortcode\" data-id=\"6ab267f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div style=\"\n  border: 1px solid #e5e7eb;\n  border-radius: 10px;\n  padding: 18px 20px;\n  margin: 20px 0 24px;\n  background: #f8fafc;\n  text-align: center;\n  font-size: 17px;\n  line-height: 1.7;\n\">\n  <strong>Outscraper business data<\/strong>\n  <span style=\"margin: 0 8px;\">+<\/span>\n  <strong>app-specific and community data<\/strong>\n  <span style=\"margin: 0 8px;\">=<\/span>\n  <strong>a richer place record<\/strong>\n<\/div><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7729907 elementor-widget elementor-widget-heading\" data-id=\"7729907\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Final Checklist: Build a Location-Based App With Google Maps Data<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-16b13274 elementor-widget elementor-widget-text-editor\" data-id=\"16b13274\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ol><li>Collect the business records with <a href=\"https:\/\/outscraper.com\/\"><strong>Outscraper<\/strong><\/a>.<\/li><li>Export and normalize the JSON fields your app needs.<\/li><li>Map the records into your own database schema.<\/li><li>Upsert the records into Supabase\/PostgreSQL.<\/li><li>Use the stored data for listings, detail pages, maps, and later spatial features.<\/li><\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-2a996877 e-flex e-con-boxed e-con e-parent\" data-id=\"2a996877\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-23416bb6 e-con-full e-flex e-con e-child\" data-id=\"23416bb6\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-423865c7 elementor-widget elementor-widget-heading\" data-id=\"423865c7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">Build Your Location-Based App With Outscraper Data\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b4088f7 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"4b4088f7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Use Outscraper to collect structured business records, normalize them into your own schema, and store them in Supabase for listings, maps, and other app features.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3ebf47f2 elementor-align-center elementor-widget elementor-widget-button\" data-id=\"3ebf47f2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/auth.outscraper.com\/businesses?country=US\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Get Business Data<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-15e21709 e-flex e-con-boxed e-con e-parent\" data-id=\"15e21709\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-28ec6d4b elementor-widget elementor-widget-template\" data-id=\"28ec6d4b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"template.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-template\">\n\t\t\t\t\t<div data-elementor-type=\"section\" data-elementor-id=\"13580\" class=\"elementor elementor-13580\" data-elementor-post-type=\"elementor_library\">\n\t\t\t\t\t<section data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-section elementor-top-section elementor-element elementor-element-6b414f7 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6b414f7\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-28114d07\" data-id=\"28114d07\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-209f7ca8 elementor-widget elementor-widget-html\" data-id=\"209f7ca8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 align=\"center\">FAQ<\/h2>\n<p align=\"center\" style=\"font-size:20px\">Most frequent questions and answers<p>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-43a4e13e elementor-widget elementor-widget-toggle\" data-id=\"43a4e13e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"toggle.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-1131\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-1131\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-right\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Can I use Outscraper JSON directly in an app?<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-1131\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"region\" aria-labelledby=\"elementor-tab-title-1131\"><p>Yes, but mapping the source fields into your own schema gives you better control over categories, updates, and database structure.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-1132\" class=\"elementor-tab-title\" data-tab=\"2\" role=\"button\" aria-controls=\"elementor-tab-content-1132\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-right\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Why use Supabase in this example?<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-1132\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"2\" role=\"region\" aria-labelledby=\"elementor-tab-title-1132\"><p>Supabase stores the normalized place records in PostgreSQL and makes them available to the Next.js app.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-1133\" class=\"elementor-tab-title\" data-tab=\"3\" role=\"button\" aria-controls=\"elementor-tab-content-1133\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-right\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Can the same coordinates support maps and nearby search?<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-1133\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"3\" role=\"region\" aria-labelledby=\"elementor-tab-title-1133\"><p>Yes. Stored latitude and longitude can power map markers and later support PostGIS nearby-place searches.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-1134\" class=\"elementor-tab-title\" data-tab=\"4\" role=\"button\" aria-controls=\"elementor-tab-content-1134\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-right\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Should I keep the raw Outscraper response?<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-1134\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"4\" role=\"region\" aria-labelledby=\"elementor-tab-title-1134\"><p><span>Yes. Keeping the original JSON in <\/span><code dir=\"ltr\"><span>source_payload<\/span><\/code><span> helps with debugging, checking transformations, and adding fields later.<\/span><\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-1135\" class=\"elementor-tab-title\" data-tab=\"5\" role=\"button\" aria-controls=\"elementor-tab-content-1135\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-right\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">What does upsert mean?<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-1135\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"5\" role=\"region\" aria-labelledby=\"elementor-tab-title-1135\"><p><span>An upsert updates a record if it already exists or inserts a new one if it does not. In this MVP, <\/span><code dir=\"ltr\"><span>place_id<\/span><\/code><span> is used to decide whether a place should be u<\/span><\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t<script type=\"application\/ld+json\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"Can I use Outscraper JSON directly in an app?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"<p>Yes, but mapping the source fields into your own schema gives you better control over categories, updates, and database structure.<\\\/p>\"}},{\"@type\":\"Question\",\"name\":\"Why use Supabase in this example?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"<p>Supabase stores the normalized place records in PostgreSQL and makes them available to the Next.js app.<\\\/p>\"}},{\"@type\":\"Question\",\"name\":\"Can the same coordinates support maps and nearby search?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"<p>Yes. Stored latitude and longitude can power map markers and later support PostGIS nearby-place searches.<\\\/p>\"}},{\"@type\":\"Question\",\"name\":\"Should I keep the raw Outscraper response?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"<p><span>Yes. Keeping the original JSON in <\\\/span><code dir=\\\"ltr\\\"><span>source_payload<\\\/span><\\\/code><span> helps with debugging, checking transformations, and adding fields later.<\\\/span><\\\/p>\"}},{\"@type\":\"Question\",\"name\":\"What does upsert mean?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"<p><span>An upsert updates a record if it already exists or inserts a new one if it does not. In this MVP, <\\\/span><code dir=\\\"ltr\\\"><span>place_id<\\\/span><\\\/code><span> is used to decide whether a place should be u<\\\/span><\\\/p>\"}}]}<\/script>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Transforme os dados do Google Maps (Outscraper) em registros que um aplicativo baseado em localiza\u00e7\u00e3o possa utilizar. Veja como os dados comerciais em JSON s\u00e3o normalizados com TypeScript, armazenados no Supabase\/PostgreSQL e preparados para listagens, mapas e recursos espaciais.<\/p>","protected":false},"author":19,"featured_media":48952,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[90],"tags":[1049,373,129,202,1050,152,1047,1046,1048],"class_list":["post-48872","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-app-development","tag-google-maps-data","tag-google-maps","tag-location-intelligence","tag-location-based-app","tag-outscraper","tag-postgresql","tag-supabase","tag-typescript"],"acf":[],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO Pro 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"Build a location-based app by turning Google Maps business data into application-ready records with Outscraper JSON, TypeScript, Supabase, and PostgreSQL.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Ed Umbao\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/outscraper.com\/pt\/location-based-app-google-maps-data-supabase\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO Pro (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_BR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Outscraper \u2013 Business Data &amp; Enrichment Platform\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Build a Location-Based App With Google Maps Data | Outscraper\" \/>\n\t\t<meta property=\"og:description\" content=\"Build a location-based app by turning Google Maps business data into application-ready records with Outscraper JSON, TypeScript, Supabase, and PostgreSQL.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/outscraper.com\/pt\/location-based-app-google-maps-data-supabase\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/outscraper.com\/wp-content\/uploads\/2023\/11\/cropped-logo-long-inverted-e1628850885713.webp\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/outscraper.com\/wp-content\/uploads\/2023\/11\/cropped-logo-long-inverted-e1628850885713.webp\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-09-14T08:12:34+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-09-14T08:59:17+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/outscraper\/\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/edumbao\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@outscraper\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Build a Location-Based App With Google Maps Data | Outscraper\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Build a location-based app by turning Google Maps business data into application-ready records with Outscraper JSON, TypeScript, Supabase, and PostgreSQL.\" \/>\n\t\t<meta name=\"twitter:creator\" content=\"@edmundumbao\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/outscraper.com\/wp-content\/uploads\/2020\/01\/logo.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/location-based-app-google-maps-data-supabase\\\/#article\",\"name\":\"Build a Location-Based App With Google Maps Data | Outscraper\",\"headline\":\"How to Build a Location-Based App with Google Maps Data and Supabase\",\"author\":{\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/author\\\/ed\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/outscraper.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/location-based-app-google-maps-data-supabase.webp\",\"width\":1270,\"height\":715,\"caption\":\"The Nomad PH MVP displays imported business records on a map using stored latitude and longitude.\"},\"datePublished\":\"2026-09-14T11:12:34+03:00\",\"dateModified\":\"2026-09-14T11:59:17+03:00\",\"inLanguage\":\"pt-BR\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/location-based-app-google-maps-data-supabase\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/location-based-app-google-maps-data-supabase\\\/#webpage\"},\"articleSection\":\"Tutorials, App Development, Google Maps data, google-maps, Location Intelligence, Location-Based App, Outscraper, PostgreSQL, Supabase, TypeScript\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/location-based-app-google-maps-data-supabase\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/outscraper.com\\\/pt\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/category\\\/tutorials\\\/#listItem\",\"name\":\"Tutorials\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/category\\\/tutorials\\\/#listItem\",\"position\":2,\"name\":\"Tutorials\",\"item\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/category\\\/tutorials\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/location-based-app-google-maps-data-supabase\\\/#listItem\",\"name\":\"How to Build a Location-Based App with Google Maps Data and Supabase\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/location-based-app-google-maps-data-supabase\\\/#listItem\",\"position\":3,\"name\":\"How to Build a Location-Based App with Google Maps Data and Supabase\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/category\\\/tutorials\\\/#listItem\",\"name\":\"Tutorials\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/#organization\",\"name\":\"Outscraper\",\"description\":\"Business Data & Enrichment Platform\",\"url\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/\",\"telephone\":\"+12812368208\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/en.gravatar.com\\\/userimage\\\/171842403\\\/0bc12b5208ff9323cafe7e39db3aef4e.png?size=500\",\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/location-based-app-google-maps-data-supabase\\\/#organizationLogo\"},\"image\":{\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/location-based-app-google-maps-data-supabase\\\/#organizationLogo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/outscraper\\\/\",\"https:\\\/\\\/twitter.com\\\/outscraper\",\"https:\\\/\\\/www.instagram.com\\\/outscraper.services\\\/\",\"https:\\\/\\\/www.tiktok.com\\\/@outscraper\\\/\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCDYOuXSEenLpt5tKNq-0l9Q\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/42886775\\\/admin\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/author\\\/ed\\\/#author\",\"url\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/author\\\/ed\\\/\",\"name\":\"Ed Umbao\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/location-based-app-google-maps-data-supabase\\\/#authorImage\",\"url\":\"https:\\\/\\\/outscraper.com\\\/wp-content\\\/litespeed\\\/avatar\\\/2b40d924571ea6350f4a0dfca2202d81.jpg?ver=1789053928\",\"width\":96,\"height\":96,\"caption\":\"Ed Umbao\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/edumbao\",\"https:\\\/\\\/twitter.com\\\/edmundumbao\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/ed-umbao\\\/\"]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/location-based-app-google-maps-data-supabase\\\/#webpage\",\"url\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/location-based-app-google-maps-data-supabase\\\/\",\"name\":\"Build a Location-Based App With Google Maps Data | Outscraper\",\"description\":\"Build a location-based app by turning Google Maps business data into application-ready records with Outscraper JSON, TypeScript, Supabase, and PostgreSQL.\",\"inLanguage\":\"pt-BR\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/location-based-app-google-maps-data-supabase\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/author\\\/ed\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/author\\\/ed\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/outscraper.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/location-based-app-google-maps-data-supabase.webp\",\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/location-based-app-google-maps-data-supabase\\\/#mainImage\",\"width\":1270,\"height\":715,\"caption\":\"The Nomad PH MVP displays imported business records on a map using stored latitude and longitude.\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/location-based-app-google-maps-data-supabase\\\/#mainImage\"},\"datePublished\":\"2026-09-14T11:12:34+03:00\",\"dateModified\":\"2026-09-14T11:59:17+03:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/#website\",\"url\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/\",\"name\":\"Outscraper\",\"description\":\"Business Data & Enrichment Platform\",\"inLanguage\":\"pt-BR\",\"publisher\":{\"@id\":\"https:\\\/\\\/outscraper.com\\\/pt\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO Pro -->\r\n\t\t<title>Build a Location-Based App With Google Maps Data | Outscraper<\/title>\n\n","aioseo_head_json":{"title":"Crie um aplicativo baseado em localiza\u00e7\u00e3o com dados do Google Maps | Outscraper","description":"Crie um aplicativo baseado em localiza\u00e7\u00e3o transformando os dados de empresas do Google Maps em registros prontos para uso em aplicativos com Outscraper JSON, TypeScript, Supabase e PostgreSQL.","canonical_url":"https:\/\/outscraper.com\/pt\/location-based-app-google-maps-data-supabase\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/outscraper.com\/pt\/location-based-app-google-maps-data-supabase\/#article","name":"Build a Location-Based App With Google Maps Data | Outscraper","headline":"How to Build a Location-Based App with Google Maps Data and Supabase","author":{"@id":"https:\/\/outscraper.com\/pt\/author\/ed\/#author"},"publisher":{"@id":"https:\/\/outscraper.com\/pt\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/location-based-app-google-maps-data-supabase.webp","width":1270,"height":715,"caption":"The Nomad PH MVP displays imported business records on a map using stored latitude and longitude."},"datePublished":"2026-09-14T11:12:34+03:00","dateModified":"2026-09-14T11:59:17+03:00","inLanguage":"pt-BR","mainEntityOfPage":{"@id":"https:\/\/outscraper.com\/pt\/location-based-app-google-maps-data-supabase\/#webpage"},"isPartOf":{"@id":"https:\/\/outscraper.com\/pt\/location-based-app-google-maps-data-supabase\/#webpage"},"articleSection":"Tutorials, App Development, Google Maps data, google-maps, Location Intelligence, Location-Based App, Outscraper, PostgreSQL, Supabase, TypeScript"},{"@type":"BreadcrumbList","@id":"https:\/\/outscraper.com\/pt\/location-based-app-google-maps-data-supabase\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/outscraper.com\/pt#listItem","position":1,"name":"Home","item":"https:\/\/outscraper.com\/pt","nextItem":{"@type":"ListItem","@id":"https:\/\/outscraper.com\/pt\/category\/tutorials\/#listItem","name":"Tutorials"}},{"@type":"ListItem","@id":"https:\/\/outscraper.com\/pt\/category\/tutorials\/#listItem","position":2,"name":"Tutorials","item":"https:\/\/outscraper.com\/pt\/category\/tutorials\/","nextItem":{"@type":"ListItem","@id":"https:\/\/outscraper.com\/pt\/location-based-app-google-maps-data-supabase\/#listItem","name":"How to Build a Location-Based App with Google Maps Data and Supabase"},"previousItem":{"@type":"ListItem","@id":"https:\/\/outscraper.com\/pt#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/outscraper.com\/pt\/location-based-app-google-maps-data-supabase\/#listItem","position":3,"name":"How to Build a Location-Based App with Google Maps Data and Supabase","previousItem":{"@type":"ListItem","@id":"https:\/\/outscraper.com\/pt\/category\/tutorials\/#listItem","name":"Tutorials"}}]},{"@type":"Organization","@id":"https:\/\/outscraper.com\/pt\/#organization","name":"Outscraper","description":"Business Data & Enrichment Platform","url":"https:\/\/outscraper.com\/pt\/","telephone":"+12812368208","logo":{"@type":"ImageObject","url":"https:\/\/en.gravatar.com\/userimage\/171842403\/0bc12b5208ff9323cafe7e39db3aef4e.png?size=500","@id":"https:\/\/outscraper.com\/pt\/location-based-app-google-maps-data-supabase\/#organizationLogo"},"image":{"@id":"https:\/\/outscraper.com\/pt\/location-based-app-google-maps-data-supabase\/#organizationLogo"},"sameAs":["https:\/\/www.facebook.com\/outscraper\/","https:\/\/twitter.com\/outscraper","https:\/\/www.instagram.com\/outscraper.services\/","https:\/\/www.tiktok.com\/@outscraper\/","https:\/\/www.youtube.com\/channel\/UCDYOuXSEenLpt5tKNq-0l9Q","https:\/\/www.linkedin.com\/company\/42886775\/admin\/"]},{"@type":"Person","@id":"https:\/\/outscraper.com\/pt\/author\/ed\/#author","url":"https:\/\/outscraper.com\/pt\/author\/ed\/","name":"Ed Umbao","image":{"@type":"ImageObject","@id":"https:\/\/outscraper.com\/pt\/location-based-app-google-maps-data-supabase\/#authorImage","url":"https:\/\/outscraper.com\/wp-content\/litespeed\/avatar\/2b40d924571ea6350f4a0dfca2202d81.jpg?ver=1789053928","width":96,"height":96,"caption":"Ed Umbao"},"sameAs":["https:\/\/www.facebook.com\/edumbao","https:\/\/twitter.com\/edmundumbao","https:\/\/www.linkedin.com\/in\/ed-umbao\/"]},{"@type":"WebPage","@id":"https:\/\/outscraper.com\/pt\/location-based-app-google-maps-data-supabase\/#webpage","url":"https:\/\/outscraper.com\/pt\/location-based-app-google-maps-data-supabase\/","name":"Build a Location-Based App With Google Maps Data | Outscraper","description":"Build a location-based app by turning Google Maps business data into application-ready records with Outscraper JSON, TypeScript, Supabase, and PostgreSQL.","inLanguage":"pt-BR","isPartOf":{"@id":"https:\/\/outscraper.com\/pt\/#website"},"breadcrumb":{"@id":"https:\/\/outscraper.com\/pt\/location-based-app-google-maps-data-supabase\/#breadcrumblist"},"author":{"@id":"https:\/\/outscraper.com\/pt\/author\/ed\/#author"},"creator":{"@id":"https:\/\/outscraper.com\/pt\/author\/ed\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/outscraper.com\/wp-content\/uploads\/2026\/09\/location-based-app-google-maps-data-supabase.webp","@id":"https:\/\/outscraper.com\/pt\/location-based-app-google-maps-data-supabase\/#mainImage","width":1270,"height":715,"caption":"The Nomad PH MVP displays imported business records on a map using stored latitude and longitude."},"primaryImageOfPage":{"@id":"https:\/\/outscraper.com\/pt\/location-based-app-google-maps-data-supabase\/#mainImage"},"datePublished":"2026-09-14T11:12:34+03:00","dateModified":"2026-09-14T11:59:17+03:00"},{"@type":"WebSite","@id":"https:\/\/outscraper.com\/pt\/#website","url":"https:\/\/outscraper.com\/pt\/","name":"Outscraper","description":"Business Data & Enrichment Platform","inLanguage":"pt-BR","publisher":{"@id":"https:\/\/outscraper.com\/pt\/#organization"}}]},"og:locale":"pt_BR","og:site_name":"Outscraper \u2013 Business Data &amp; Enrichment Platform","og:type":"article","og:title":"Build a Location-Based App With Google Maps Data | Outscraper","og:description":"Build a location-based app by turning Google Maps business data into application-ready records with Outscraper JSON, TypeScript, Supabase, and PostgreSQL.","og:url":"https:\/\/outscraper.com\/pt\/location-based-app-google-maps-data-supabase\/","og:image":"https:\/\/outscraper.com\/wp-content\/uploads\/2023\/11\/cropped-logo-long-inverted-e1628850885713.webp","og:image:secure_url":"https:\/\/outscraper.com\/wp-content\/uploads\/2023\/11\/cropped-logo-long-inverted-e1628850885713.webp","article:published_time":"2026-09-14T08:12:34+00:00","article:modified_time":"2026-09-14T08:59:17+00:00","article:publisher":"https:\/\/www.facebook.com\/outscraper\/","article:author":"https:\/\/www.facebook.com\/edumbao","twitter:card":"summary","twitter:site":"@outscraper","twitter:title":"Build a Location-Based App With Google Maps Data | Outscraper","twitter:description":"Build a location-based app by turning Google Maps business data into application-ready records with Outscraper JSON, TypeScript, Supabase, and PostgreSQL.","twitter:creator":"@edmundumbao","twitter:image":"https:\/\/outscraper.com\/wp-content\/uploads\/2020\/01\/logo.png"},"aioseo_meta_data":{"post_id":"48872","title":"Build a Location-Based App With Google Maps Data | #site_title","description":"Crie um aplicativo baseado em localiza\u00e7\u00e3o transformando os dados de empresas do Google Maps em registros prontos para uso em aplicativos com Outscraper JSON, TypeScript, Supabase e PostgreSQL.","keywords":null,"keyphrases":{"focus":{"keyphrase":"location-based app","score":0,"analysis":[]},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"WebPage","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","location":null,"local_seo":null,"seo_analyzer_scan_date":"2026-09-14 09:00:04","breadcrumb_settings":null,"limit_modified_date":false,"open_ai":null,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2026-09-11 03:27:43","updated":"2026-09-14 09:36:10","focus_keyword":"location-based app","additional_keywords":null,"truseo_locale":null},"_links":{"self":[{"href":"https:\/\/outscraper.com\/pt\/wp-json\/wp\/v2\/posts\/48872","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/outscraper.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/outscraper.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/outscraper.com\/pt\/wp-json\/wp\/v2\/users\/19"}],"replies":[{"embeddable":true,"href":"https:\/\/outscraper.com\/pt\/wp-json\/wp\/v2\/comments?post=48872"}],"version-history":[{"count":80,"href":"https:\/\/outscraper.com\/pt\/wp-json\/wp\/v2\/posts\/48872\/revisions"}],"predecessor-version":[{"id":49158,"href":"https:\/\/outscraper.com\/pt\/wp-json\/wp\/v2\/posts\/48872\/revisions\/49158"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/outscraper.com\/pt\/wp-json\/wp\/v2\/media\/48952"}],"wp:attachment":[{"href":"https:\/\/outscraper.com\/pt\/wp-json\/wp\/v2\/media?parent=48872"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/outscraper.com\/pt\/wp-json\/wp\/v2\/categories?post=48872"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/outscraper.com\/pt\/wp-json\/wp\/v2\/tags?post=48872"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}