Demo Website Generator for Local Businesses avatar

Demo Website Generator for Local Businesses

Pricing

from $150.00 / 1,000 demo site generateds

Go to Apify Store
Demo Website Generator for Local Businesses

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

Sebastian Elustondo

Maintained by Community

Actor 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

  1. Run any Google Maps scraper that finds businesses without a website, for example compass/crawler-google-places with a "no website" filter, or one of the dedicated leads scrapers.
  2. Paste the run's default dataset ID into this Actor's datasetId field (or paste businesses as JSON in businesses).
  3. Get, for each business: a self-contained index.html demo, a desktop and a mobile screenshot, a pitch document with four messages, and a dataset row with all the links.
  4. 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

FieldTypeDescription
businessesarrayBusinesses as JSON objects (see below). Only name is required.
datasetIdstringDataset ID of a Google Maps scraper run. Items are mapped automatically.
includeBusinessesWithWebsitebooleanDefault false: items with a website are skipped.
maxBusinessesintegerStop after this many demos. Default 50.
languagestringauto, es, en or pt. Auto picks the language from the country.
agencyNamestringYour studio name, used in the footer credit and the pitch.
senderNamestringFirst name that signs the messages.
agencyEmailstringOptional alternative contact in the pitch.
agencyWebsitestringOptional link on the footer credit.
priceLinestringOptional. Written into the pitch as a note for the call, never in message 1.
takeScreenshotsbooleanDefault true. Desktop and mobile full-page PNGs.
footerCreditbooleanDefault true. "Demo site created by {agency}" in the footer.
accentColor, backgroundColorstringOptional 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:

EventCharged when
demo-generatedA demo site and its pitch are written for one business.
screenshotDesktop 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 datasetId requires 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 ApifyClient
client = 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 them
run = 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.