Demo Website Generator for Local Businesses
Pricing
from $150.00 / 1,000 demo site generateds
Demo Website Generator for Local Businesses
Turn Google Maps leads into ready-to-pitch demo websites with real reviews, photos and a WhatsApp CTA, plus outreach messages.
Pricing
from $150.00 / 1,000 demo site generateds
Rating
0.0
(0)
Developer
Sebastian Elustondo
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Turn Google Maps leads into ready-to-pitch demo websites. For every business you feed it, this Actor builds a polished one-page site with the business's real name, Google rating, reviews, photos and a WhatsApp button, takes desktop and mobile screenshots, and writes the outreach messages you send to close the deal.
It is the step after any "businesses without websites" Google Maps scraper: those give you leads, this gives you the demo and the pitch for each lead.
Who it is for
- Web design agencies and freelancers who sell websites to local businesses (barbershops, restaurants, clinics, gyms, salons, auto shops, bakeries).
- AI agencies and lead-gen operators who want to send a finished demo instead of a cold "do you need a website?" message.
- Anyone running the classic "no website leads" workflow who is tired of building demos by hand.
How it works
- Run any Google Maps scraper that finds businesses without a website, for example
compass/crawler-google-placeswith a "no website" filter, or one of the dedicated leads scrapers. - Paste the run's default dataset ID into this Actor's
datasetIdfield (or paste businesses as JSON inbusinesses). - Get, for each business: a self-contained
index.htmldemo, a desktop and a mobile screenshot, a pitch document with four messages, and a dataset row with all the links. - Send message 1 with the screenshot on WhatsApp. When they reply, send the demo link. Close on a 10-minute call.
Businesses that already have a website in the dataset are skipped by default. Closed places are skipped too.
Input
| Field | Type | Description |
|---|---|---|
businesses | array | Businesses as JSON objects (see below). Only name is required. |
datasetId | string | Dataset ID of a Google Maps scraper run. Items are mapped automatically. |
includeBusinessesWithWebsite | boolean | Default false: items with a website are skipped. |
maxBusinesses | integer | Stop after this many demos. Default 50. |
language | string | auto, es, en or pt. Auto picks the language from the country. |
agencyName | string | Your studio name, used in the footer credit and the pitch. |
senderName | string | First name that signs the messages. |
agencyEmail | string | Optional alternative contact in the pitch. |
agencyWebsite | string | Optional link on the footer credit. |
priceLine | string | Optional. Written into the pitch as a note for the call, never in message 1. |
takeScreenshots | boolean | Default true. Desktop and mobile full-page PNGs. |
footerCredit | boolean | Default true. "Demo site created by {agency}" in the footer. |
accentColor, backgroundColor | string | Optional hex overrides. By default each category gets its own palette. |
The business object
{"name": "Barbería La Estación","category": "Barbería","address": "Av. Triunvirato 4500, Villa Urquiza, CABA","city": "Buenos Aires","country": "AR","phone": "011 4521-0000","whatsapp": "5491145210000","rating": 4.9,"reviewsCount": 151,"reviews": [{ "author": "Martín G.", "text": "Excelente atención.", "stars": 5, "date": "2025-06-01" }],"photos": ["https://lh3.googleusercontent.com/p/..."],"hours": [{ "day": "Tuesday", "hours": "10:00 to 20:00" }],"instagram": "laestacion","mapsUrl": "https://www.google.com/maps/place/...","description": "","language": "es"}
Field names used by popular Google Maps scrapers are accepted as aliases: title, categoryName, categories, totalScore, reviewsCount, phoneUnformatted, imageUrls, imageUrl, openingHours, countryCode, url, and the review fields name, text, stars, publishedAtDate. When whatsapp is missing the phone is used, with the country dial code added when needed (Argentina mobiles get the required 9).
Output
One dataset item per business:
{"name": "Steinway Barber Shop","slug": "steinway-barber-shop-a6008c","category": "Barber shop","preset": "barber","language": "en","city": "Astoria, NY","country": "US","address": "25-02 Steinway St, Astoria, NY 11103","phone": "+1 718-728-5727","whatsapp": "17187285727","rating": 4.9,"reviewsCount": 116,"photosUsed": 0,"reviewsUsed": 3,"demoUrl": "https://api.apify.com/v2/key-value-stores/.../records/steinway-barber-shop-a6008c.html","screenshotDesktopUrl": "https://api.apify.com/v2/key-value-stores/.../records/steinway-barber-shop-a6008c-desktop.png","screenshotMobileUrl": "https://api.apify.com/v2/key-value-stores/.../records/steinway-barber-shop-a6008c-mobile.png","pitchUrl": "https://api.apify.com/v2/key-value-stores/.../records/steinway-barber-shop-a6008c-pitch.md","whatsappLink": "https://wa.me/17187285727?text=Hi%21%20I%20would%20like%20to%20book%20an%20appointment.","whenToSend": "Tuesday or Wednesday, 9 to 10 am, before the first chair. Never Friday or Saturday.","message1": "Hi! Is this Steinway Barber Shop? I'm Sebastián from Quovra. ...","generatedAt": "2026-09-02T22:16:09+00:00"}
The key-value store holds the files: {slug}.html, {slug}-desktop.png, {slug}-mobile.png and {slug}-pitch.md. The demoUrl opens the demo directly in a browser, so you can share it as is or download the HTML and host it under your own domain.
What the demo site includes
- Header with the business name and a booking or contact button.
- Hero with the category and city, the name as headline, a category tagline, the main WhatsApp (or call) button, and the reputation seal: the real Google rating, stars, review count and the best short review.
- Three "why us" points and a hero visual: the first Google photo when available, or a category illustration.
- Services or menu cards for the category, with prices marked "Ask" (nothing is invented).
- Photo gallery with the business's Google photos, or labeled placeholder slots.
- Real Google reviews, with a link to the listing when available.
- Opening hours and address with a "Get directions" link.
- Contact band, footer credit and a floating WhatsApp button.
The HTML is a single file with inline CSS and a few lines of inline JavaScript (scroll reveals). No external scripts, fonts or trackers. It is marked noindex because it is a demo.
Categories and languages
Presets: barbershop and hair salon, restaurant and food, veterinary and pet, beauty and nails, gym and fitness, health and dental, auto repair, bakery and café, real estate, and a generic local business fallback. The preset is chosen from the category text (English, Spanish or Portuguese keywords) and sets the palette, type treatment, illustration, services and copy.
Languages: Spanish (River Plate "vos" for Argentina, Uruguay and Paraguay, neutral "tú" elsewhere), English and Portuguese. Auto mode picks the language from the country code.
The pitch document
For every business you get a Markdown file with:
- When to send (per category: before opening for barbers and salons, before lunch service for restaurants, the afternoon lull for clinics, and so on).
- Message 1 for WhatsApp: names the business's real rating and review count, mentions the missing website, attaches the screenshot, asks for a 10-minute call. No link, no price.
- Message 2 when they reply, with the demo link.
- Follow-up 1 on day 4 or 5 and follow-up 2 on day 10 to 12 with the competitor lever.
- Three "what the business gains" bullets in owner language, and notes for the call.
Square brackets mark the things only you know, such as [COMPETITOR] or [OWNER NAME].
Pricing
This Actor uses pay-per-event pricing. You pay for what is generated:
| Event | Charged when |
|---|---|
demo-generated | A demo site and its pitch are written for one business. |
screenshot | Desktop and mobile screenshots are taken for one business (only when takeScreenshots is on). |
Turn screenshots off for cheaper runs when you only need the HTML.
Limitations
- The demo is static HTML meant to be hosted by you (Cloudflare Pages, Netlify, your own server) or opened from the key-value store link. It is not a website builder and there is no editor.
- Photos are hot-linked from Google. Google image URLs can expire; when a photo fails to load the site shows a placeholder automatically. Download the photos before publishing a site for a paying client.
- Services, prices and taglines are category defaults, written to be true for most businesses of that kind. Prices are never invented; every card says "Ask".
- Reviews come from your input. The Actor does not scrape Google Maps itself; chain it after a scraper that returns reviews if you want them on the demo.
- Reading
datasetIdrequires the run to be in your Apify account (or a dataset shared with you).
Integrations
Run it from the API, chain it after a scraper, or call it from Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")# 1. Find businesses without a website (any Google Maps scraper works)leads = client.actor("compass/crawler-google-places").call(run_input={"searchStringsArray": ["barber shop"],"locationQuery": "Astoria, New York","maxCrawledPlacesPerSearch": 30,"website": "withoutWebsite","maxReviews": 5,"maxImages": 6,})# 2. Build demos for themrun = client.actor("<YOUR_USERNAME>/local-business-demo-site-generator").call(run_input={"datasetId": leads["defaultDatasetId"],"agencyName": "My Studio","senderName": "Alex",})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["name"], item["demoUrl"], item["screenshotDesktopUrl"])
FAQ
Can I use my own template? Not yet. Category presets are built in; colors can be overridden with accentColor and backgroundColor.
Does it write in my language? Sites and pitches are available in Spanish, English and Portuguese. Set language or let the country decide.
Does the demo need a server? No. It is one HTML file. Open it, upload it anywhere, or share the key-value store link.
Can I remove the footer credit? Set footerCredit to false.
What if a business has no phone? The site still renders, with "Get directions" as the main action, and the pitch flags that you need to get the number before sending.