Skip to main content
RTILA Marketplace

Local Business Profile Scraper - output schema

Search a map category and collect phones, websites and ratings from every business profile page.

Lead Generation Intermediate Experimental v1.0.0 Updated Updated 2026-09-20 8 min read
Download
  • Windows x86_64

    BOT_local-business-profile-scraper.exe

    98.9 MB

    Download
  • macOS Apple Silicon chmod +x

    BOT_local-business-profile-scraper.sh

    87.5 MB

    Download
  • macOS Intel chmod +x

    BOT_local-business-profile-scraper.sh

    99.4 MB

    Download
  • Linux x86_64 chmod +x

    BOT_local-business-profile-scraper.sh

    122.5 MB

    Download

Do not rename the downloaded file - the filename carries the bot's configuration id.

This tab documents what a finished run produces: every dataset with its fields and transformations, sample rows, the files written to disk, and the destinations results are delivered to. Back to the overview tab.

The tables on this page are generated automatically from the published project configuration and therefore cannot disagree with it.

Datasets

One table per dataset: item selector, deduplication key, required fields, and per-field transformations.

Business_Details

Item selector:

Fields of dataset "Business_Details"
FieldProperty typeSelector / notesDefault
Category css=button[jsaction*='category'] text
Title css=h1 text
Amenities html
Field details

Selector: css=div[role="region"][aria-label*="About"]

Transformations:

  1. script (code: const regex = /aria-label="([^"]+)"/g; const matches = [...value.matchAll(regex)].map(match => match[1]); return matches .join("\n");)

Phone attribute
Field details

Selector: css=[data-item-id*='phone']

Transformations:

  1. replace

Attribute: aria-label

Website attribute
Field details

Selector: css=[data-item-id*='authority']

Transformations:

  1. replace

Attribute: href

Menu attribute
Field details

Selector: css=[data-item-id='menu']

Attribute: href

Price_Range css=table[aria-label='Price range histogram'] tr:first-child td:first-child text
Rating attribute
Field details

Selector: css=[role='img'][aria-label*='stars' i]

Transformations:

  1. regex (pattern: ([\d.,]+), default_value: )

Attribute: aria-label

Reviews_Count text
Field details

Selector: css=[aria-label*='reviews' i]

Transformations:

  1. regex (pattern: ([\d,]+), default_value: )

Address attribute
Field details

Selector: css=[data-item-id*='address' i]

Transformations:

  1. replace

Attribute: aria-label

Plus_Code attribute
Field details

Selector: css=[data-item-id='oloc']

Transformations:

  1. replace

Attribute: aria-label

Map_Search_URLs

Item selector: css=div[aria-label*='Results for '] div[role='article']

Fields of dataset "Map_Search_URLs"
FieldProperty typeSelector / notesDefault
PlaceURL attribute
Field details

Selector: css=a[href*='/maps/place/']

Attribute: href

Sample output

Sample rows produced by this bot
TitleCategoryAmenitiesPhoneWebsiteMenuPrice_RangeRatingReviews_CountAddressPlus_Code
Blue Door Coffee House Coffee shop Wi-Fi, outdoor seating, wheelchair accessible +1 555 010 2030 https://bluedoorcoffee.example.com https://bluedoorcoffee.example.com/menu $$ 4.5 1284 482 Example Ave, Springfield 8FVC2G3M+4X

File outputs

This bot writes no files.

Delivery destinations

Where finished results go once the run completes.

Results are stored locally; no external delivery is configured.

View the full project configuration on the Config tab.

Frequently asked questions

How do I scrape business details from map search results?
Run the launcher, type a category and location such as coffee shops in Springfield into the single search prompt, and the bot fills the map search box, scrolls the results pane to the end, collects every listing's profile URL, then visits each one and extracts the eleven Business_Details fields. No selector work is required from you.
What data does the business profile scraper collect?
Eleven fields per profile: Category, Title, Amenities, Phone, Website, Menu, Price_Range, Rating, Reviews_Count, Address and Plus_Code. Everything comes from the publicly rendered profile page - no logged-in views, no review text, no photos.
Why does the bot visit every listing page one by one?
Search-result cards only carry a fraction of the data. Phone numbers, websites, menus, amenities, price ranges and plus codes live on the individual profile pages, so the run collects profile URLs first, then iterates through them with a for_each loop, waiting for each page's heading before extracting. That is also why run time scales with result count.
How long does a full profile run take?
Budget roughly one page visit per listing on top of the scroll phase: a search returning 100 results typically takes 15-30 minutes at human-paced navigation, and large city-wide searches can run an hour or more. Narrow the search term or add a district qualifier to keep runs short.
Does it collect review text?
No, deliberately. The dataset captures the aggregate Rating and Reviews_Count only. Review text is personal data with a much higher compliance bar, and this configuration does not touch it.
Where does the collected business data go?
Rows are stored under the two dataset names from the configuration - Map_Search_URLs for the profile links and Business_Details for the eleven-field records - in the launcher's local results store on your machine. This release sets no fixed export filename, so you export from the results view; nothing is uploaded anywhere except the configuration fetch and download telemetry listed on this page.
Is collecting business profile data allowed?
Automated collection may conflict with the map platform's terms of service, and a sole trader's name, phone and address are personal data in most jurisdictions. You are responsible for reviewing the platform terms and establishing a lawful basis under GDPR, UK GDPR or your local equivalent before running the bot or contacting anyone from the output.
Does the scraper work offline?
No. The search results and profile pages are live web content, so the run needs a network connection throughout. The only other call the launcher makes is the configuration fetch at startup.
Can I limit how many profiles are visited?
This release ships with unbounded scrolling - it collects until the results pane stops growing - and then visits every collected profile. The practical control is your search term: add a neighbourhood, district or narrower category to shrink the result set before the run starts.
How are missing phone numbers or websites handled?
Empty is normal and expected. Not every business publishes a phone number, website or menu, and the transformations fall back to empty values rather than failing the row. Business_Details has no deduplication key in this release, so if a listing appears twice in the results pane it can produce two rows - check Title plus Address when merging.
Does the bot need an internet connection to run?
Yes on first run: the launcher fetches its configuration by id from the backend at launch, so an internet connection is required at least the first time it starts.
Can I rename the downloaded file?
No. The downloaded file must keep its exact name - the filename carries the per-bot configuration id, and renaming it breaks the configuration fetch at launch.