How to Create Website Thumbnails for a Local Business Directory in India
Choose the right image for each listing, generate consistent website previews, and handle sizing, image rights, performance, and failures.
To create website thumbnails for a local business directory in India, first decide whether each listing needs a screenshot of the business website, a social sharing image for the directory listing, or a real photograph of the business. These are different assets. For website screenshots, capture each public URL at a consistent viewport, crop to your card ratio, compress the result, store the source URL and capture date, and provide a manual fallback for sites that cannot be captured or do not produce a useful image.
Use an authorized image source and keep licensing or attribution details. Google Business Profile’s image guidance is platform-specific: it recommends 720 × 720 pixels, accepts images from 10 KB to 5 MB, and sets a 250 × 250 pixel minimum. Those specifications do not define the right size for your own directory cards.
1. Choose the image type before choosing a tool
| Asset | What it shows | Typical workflow |
|---|---|---|
| Website screenshot | A view of the business’s own public website | Capture a URL at a standard viewport, crop and compress it, then refresh it periodically |
| Social sharing image | An image representing the directory’s listing page when it is shared | Create or select an image and expose it through the listing page’s Open Graph og:image metadata |
| Business photograph | The actual premises, products, or services | Use a photo supplied by the business or one you have permission to publish |
Do not present a website screenshot or stock image as a photograph of the actual premises. For real business photos, choose images that accurately represent the business, are clear and in focus, and have any required credit. Google advises that Business Profile photos represent reality and be well lit.
2. Set a consistent thumbnail specification
Choose the card’s aspect ratio and display dimensions based on your own directory layout. For example, a wide card might use a 16:9 crop while a compact logo or profile card may suit a square crop. These are design choices, not universal Google requirements. Use responsive image markup or generate appropriately sized variants so a large original is not downloaded for every small card.
- Pick a standard capture viewport and device mode; consistency makes cards easier to scan.
- Define the crop behavior: center crop, top-aligned crop, or a manually selected region. A centered crop can cut off a business logo or headline near the top.
- Use a modern compressed format such as WebP where your delivery stack supports it, with a fallback if needed by your audience.
- Keep the source URL, capture timestamp, chosen viewport, output dimensions, and any permission or license information with the asset record.
- Set a refresh policy appropriate to your directory. A screenshot is a point-in-time view and can become stale when a business changes its site.
For search sharing, put an image that represents the listing in its Open Graph metadata. The Open Graph Protocol defines og:image as the image associated with the page. Google says representative, high-resolution imagery can help its systems understand images; metadata is a discovery signal, not a guarantee of a particular display or search result. See the Open Graph Protocol and Google’s image guidance.
3. Build a screenshot thumbnail workflow
- Validate the listing URL. Require an absolute HTTP or HTTPS URL, reject unsupported schemes, and consider blocking private-network and localhost destinations to prevent server-side request forgery if users submit URLs.
- Capture consistently. Use the same viewport, wait condition, and page state for each capture. Decide whether the card needs just the initial viewport or a full-page image; full-page screenshots can be much taller and heavier.
- Handle the result. Check whether navigation completed and whether the returned image is non-empty. A bot check, login wall, blank page, timeout, or broken layout should enter a review or fallback path rather than silently becoming a misleading thumbnail.
- Normalize the crop and dimensions. Apply the directory’s chosen aspect ratio and resize to the largest size your card needs. Preserve the original only if you need it for later recropping and have an appropriate retention policy.
- Compress and cache. Store the output in image storage or a CDN, use a stable asset key, and invalidate it when the source URL or capture version changes.
- Provide a fallback. Use a business-provided image with permission, a neutral placeholder, or a manual review queue. Never imply that a placeholder is a photograph of the business.
For a browser-based implementation, a headless browser can navigate to each URL, set the viewport, take a screenshot, and then pass the result through an image-processing step to crop and encode it. The exact browser API and install commands depend on the library and runtime you select. Keep browser versions pinned in production, put navigation behind a timeout, and limit concurrency so slow or hostile pages cannot exhaust worker memory. The central requirements are the capture, validation, crop, compression, cache, and fallback stages above.
4. Get dimensions right for each destination
Google Business Profile recommends JPG or PNG photos between 10 KB and 5 MB, at 720 × 720 pixels, with a minimum of 250 × 250 pixels. These apply to uploads to Business Profile, not to every directory card, website screenshot, or social preview. Choose your own responsive card dimensions and crops based on the layout.
The Business Profile media API documentation says non-profile and non-cover photos need a short edge of at least 250 pixels and a file size of at least 10,240 bytes; the API can return a thumbnail URL. Those are API requirements for that context, not a general web-thumbnail specification. Google also says photos appear only after a Business Profile is verified, may take 24–48 hours to appear, and a selected cover image is not guaranteed to display first. See Google Business Profile photo guidelines and the Business Profile media API reference.
5. Rights, attribution, and discoverability
Use images you own, have permission to publish, or can use under a suitable license. Record creator, credit, copyright, and license details where required. Google documents image metadata options including Schema.org ImageObject and IPTC fields, but does not guarantee that supplied metadata will appear in results. If screenshots include third-party material, such as images, marks, or search results, check the relevant terms and permissions before republishing. Google states that publishers are responsible for obtaining necessary third-party approvals for material shown in screenshots; do not imply Google endorsement or affiliation.
For image search discovery, the page containing the image and the image itself need to be publicly accessible to crawlers. Add useful nearby text, alt text, or a caption that describes the image accurately. New images may take time to be indexed. Do not use decorative alt text to claim facts that the image does not establish. See Google’s guidance on images in Search.
6. Automate URL captures with ScreenshotNeo
If you are generating thumbnails from business URLs, ScreenshotNeo is a website screenshot API and MCP server. Its API accepts a URL and returns an image or PDF; consult the API documentation for supported parameters. The examples below use a Stripe URL; replace it with a business site you are authorized to capture.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
import requests
r = requests.get(
"https://api.screenshotneo.com/v1/shot",
params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"},
timeout=90,
)
r.raise_for_status()
with open("shot.webp", "wb") as f:
f.write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`Screenshot request failed: ${res.status}`);
const bytes = Buffer.from(await res.arrayBuffer());
await import('node:fs/promises').then(fs => fs.writeFile('shot.webp', bytes));
ScreenshotNeo supports full-page capture, CSS-selector element capture, device presets and custom viewports, retina scale, output formats, resizing, custom CSS and JavaScript, waits, and caching with a chosen TTL. For a directory pipeline, use a fixed viewport and output settings, choose a cache TTL that matches your refresh policy, and inspect the response’s X-Page-Verdict and X-Billed headers to identify the outcome. Its clean-capture options accept consent banners like a visitor and remove more than 60 known consent platforms, newsletter popups, and chat widgets; each cleanup step can be turned off. Other options include blocking ads, trackers, requests, or resource types, and supplying headers, cookies, a user agent, or authorization where appropriate. Do not use those options to bypass access controls or capture content you lack permission to republish.
Or skip the browser setup
Call the ScreenshotNeo API with one GET request:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
Cookie banners, popups, and chat widgets are removed before the shot. Bot checks, blank pages, and failed loads are never billed, and response headers report the page verdict and billing outcome. An MCP server lets AI agents use screenshot tools. The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 screenshots. See the API documentation and sign up for 1,000 free screenshots a month, no card required.
7. Performance, reliability, and cost
- Performance: The main costs are browser navigation, rendering, image processing, and delivery. Resize to the actual display need, compress output, cache captures, and lazy-load below-the-fold cards. Large full-page images can consume more bandwidth and storage than viewport captures.
- Reliability: Business sites vary in load time, scripts, consent prompts, and bot defenses. Use timeouts, bounded retries for transient failures, capture status logging, and a manual or placeholder fallback. Test a representative sample of Indian business sites before adopting a provider or browser workflow; a screenshot feature does not establish successful capture on every site.
- Cost: Estimate capture volume, recapture frequency, storage, bandwidth, image processing, and manual review. The research does not establish comparative vendor prices or performance. ScreenshotNeo’s stated plans are Free: 1,000 shots/month; Starter: $5 for 3,000; Growth: $15 for 15,000; Pro: $39 for 60,000; Scale: $99 for 250,000; Business: $249 for 1,000,000. Yearly billing gives two months free, and all features are on every plan. Confirm current plan details on its site before budgeting.
8. Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Screenshot is blank | The site did not render, navigation failed, or content requires interaction | Check the URL and capture result; wait for a meaningful selector or a bounded delay; route to manual review if it remains blank |
| Bot check or CAPTCHA appears | The site blocks automated browsing | Do not attempt to defeat the challenge. Use a business-supplied image or ask for an approved preview method |
| Cookie overlay covers the page | The site presents a consent dialog before capture | Use an authorized consent-cleanup option or capture an approved state; ensure the output does not misrepresent the site |
| Important content is missing | It loads lazily or after scripts, scrolling, or user interaction | Wait for a selector or network idle where suitable, or use full-page capture; keep waits bounded |
| Crop cuts off the logo or title | Center cropping does not match the page’s layout | Try a top-aligned crop, adjust the capture viewport, or manually select an element/region |
| Images look soft | Source capture is too small or the card is shown at a larger size | Capture at an appropriate viewport or retina scale, then resize once to the intended output dimensions |
| Thumbnail is stale | The stored screenshot is cached beyond the refresh interval | Track capture time, set a suitable TTL, and recapture on schedule or when the source URL changes |
| Request returns an error or unexpected file | Invalid credentials, URL, parameter, timeout, or an error response saved as an image | Check HTTP status and response headers before writing bytes as an image; consult the API docs for parameter and error details |
9. A practical launch checklist
- Decide which of the three asset types each listing displays.
- Choose a card ratio, viewport, crop rule, output dimensions, and compression format.
- Store source, capture date, permissions, and attribution with each image.
- Validate URLs and protect capture workers from private-network destinations and excessive concurrency.
- Handle bot checks, unavailable sites, blank pages, and poor layouts with a clear fallback.
- Keep listing images and pages publicly accessible if search discovery matters; use accurate alt text and relevant Open Graph metadata.
- Review a representative set of sites and mobile layouts before bulk generation.
FAQ
Can I use the same image for the directory card and social sharing preview?
You can, if it works at both sizes and represents the listing clearly. Many directories use separate crops because a card and a social preview have different layouts.
Does adding og:image guarantee that Google or a social network shows that image?
No. It identifies a preferred sharing image, but platforms decide how and whether to display imagery.
Should every listing use a screenshot?
No. A screenshot is useful when the goal is to preview the business’s website. Use an authorized business photo when the goal is to show the actual premises or products.
Is Google’s 720 × 720 size the right size for my directory?
Only if it suits your design or you are preparing an image for the relevant Business Profile workflow. Your directory card dimensions are a separate design decision.


