Skip to content
All case studies
Open sourceLocal search dataDubai, UAE

15,246 businesses from 1,400 Google Maps requests

An open-source toolkit that crawls Google Maps into a business directory. No paid API call runs without an explicit yes.

AI Transformation Lead

I built this toolkit as part of the SearchApi Developer Ambassador Program.

Outcomes

Inside Dubai
14,981 businesses
Categorised
99.5% of businesses
Crawl errors
Zero

The problem

A local directory needs every business in a city, but one Google Maps query stops at 200 results. Google's category labels need cleaning, and sending every business to an AI model costs more as the dataset grows. Reviews also thank staff by name, and those names must never reach a public page.

Constraints

  • Never spend money by accident
  • Keep the crawled dataset out of the public repo
  • Honour every removal request, even after a full rebuild

What I built

  1. I split the crawl into 44 Dubai neighbourhood tiles and 40 business categories, so many small queries cover what one query cannot. Before any spend, the planning step estimated 1,250 to 3,170 requests, and the real run used 1,400. It found 15,246 businesses, and 14,981 of them sit inside Dubai.
  2. Every command that spends credits on SearchApi, a paid API for Google Maps results, refuses to run until I confirm the spend. The crawler archives every raw response before parsing it, so rebuilds never pay for a second crawl.
  3. I classify category labels, not businesses. The 15,246 businesses share only 1,787 distinct labels, so the AI bill grows with new labels, not new businesses. Keyword rules alone covered 95.8% of businesses with no model call. Hand mapping and Claude Haiku 4.5 took coverage to 99.5%. The model call needs the same confirmation.
  4. A review theme must recur across 5 or more businesses and stay on topic, which filters out staff names without a blocklist. Removal requests apply every time the data loads, so a rebuild from the archive cannot restore a removed listing.
  5. The suite ran 884 tests offline in September 2026, against recorded API responses, so automated checks never spend a credit. The GitHub deploy workflow signs in to AWS with a short-lived token, so GitHub stores no AWS key.
  6. I publish the limits beside the numbers. The live site still reads a data file bundled with the app, not the DynamoDB database. No speed or ranking numbers exist yet.

Languages

  • TypeScript

Stack

  • Next.js 16
  • SST v4
  • AWS Lambda, S3 and CloudFront
  • DynamoDB (single-table)
  • SQS + dead-letter queue
  • SearchApi Google Maps engine
  • Claude Haiku 4.5
  • Vitest

Code and links

Engagement

Want work like this?

I scope every engagement fresh. Request a free call to test the fit.

Most fixed-scope full-stack builds cost $15,000 to $50,000.

About AED 55,000 to 183,500.

Delivered over 4 to 12 weeks, against performance targets agreed up front.

Extra days cost $1,500 each (about AED 5,500).