ScreenshotNeo

BlogHow-to

How to Create a No-Code Website Screenshot Workflow Using WhatsApp and Google Sheets in India

Build a WhatsApp-to-Google Sheets workflow that captures submitted websites, records status and screenshot links, and handles privacy and delivery failures.

By the ScreenshotNeo team4 October 202610 min read

Direct answer: To automatically screenshot a website URL sent on WhatsApp and save the result in Google Sheets, connect a WhatsApp Business Platform webhook to an automation step, render the URL in a real browser-based screenshot service, and write the request and screenshot link to a sheet. Receiving a WhatsApp message does not by itself create this connection. You need a configured HTTPS webhook, an app subscribed to WhatsApp Business Account (WABA) events, URL validation, and a screenshot renderer. Meta describes the Cloud API as the hosted WhatsApp Business Platform API and documents the webhook callback and subscription model. [Meta WhatsApp Cloud API; Meta webhook documentation]

1. What the workflow does

  1. A person sends a website URL to your WhatsApp Business number.
  2. Meta sends an event to your configured, publicly reachable HTTPS webhook.
  3. Your automation verifies the request, extracts and validates the URL, and prevents duplicate processing.
  4. A browser screenshot service loads the page and returns an image or a link to it.
  5. Your workflow adds a row to Google Sheets with the submission, processing status, and screenshot link.
  6. Optionally, it replies to the user with the result, subject to WhatsApp’s messaging rules.

A normal HTTP fetch can download a page’s HTML, but it does not render the page as a browser would. For screenshots, use a browser-based renderer. Google Apps Script can call external HTTP and HTTPS services through UrlFetchApp; that ability is useful for orchestration, but does not make Apps Script a browser renderer. See Google’s UrlFetchApp reference.

2. Choose an implementation approach

Approach Good fit when Check before choosing
Managed no-code automation or WhatsApp solution provider You want a visual workflow and a provider to handle much of the webhook plumbing. Confirm it supports inbound WhatsApp events, HTTPS webhook security, browser-based screenshots, retries, duplicate handling, Google Sheets, and your privacy and availability needs in India. Check its current limits and total cost.
Custom webhook plus Apps Script and Sheets You need control over validation, processing, and what gets stored. You must configure and secure the webhook, arrange screenshot rendering, handle failures and retries, and account for platform limits.

The workflow uses distinct capabilities; the sources do not establish a single native, turnkey WhatsApp-to-Sheets screenshot feature. A vendor tutorial can illustrate calling a screenshot API from Apps Script, but does not establish that any provider is best, free, or suitable for your use in India: example implementation tutorial.

3. Set up the WhatsApp webhook and sheet

  1. Prepare WhatsApp Business Platform access. Meta’s Cloud API setup requires a Meta business portfolio, a WhatsApp Business Account, and a business phone number. Follow Meta’s current setup and webhook instructions for the account you operate.
  2. Configure a public HTTPS callback. Complete Meta’s webhook verification flow and subscribe your app to the WABA events you need. A spreadsheet URL is not a webhook; Meta must be able to reach the configured endpoint.
  3. Keep the verification and event paths distinct. The setup challenge verifies that the callback is configured. For incoming events, validate the request according to Meta’s current webhook security guidance before acting on its contents.
  4. Create a sheet with these columns: received_at, message_id, submitted_url, normalized_url, status, screenshot_url, error, and, only if needed, a minimal sender reference.
  5. Choose where images live. Store the image in a file store or use a screenshot service’s retrievable link, then put that link in the sheet. Avoid treating a large binary image as ordinary cell data.

4. Build the no-code flow

In a visual automation builder, map the steps below to its WhatsApp trigger, filters, HTTP/API action, and Google Sheets action. Names and capabilities vary by provider, so confirm that the builder can receive the required inbound webhook and call a browser screenshot service.

  1. Trigger: receive a WhatsApp message event from the connected WABA.
  2. Verify and deduplicate: validate the incoming event, extract its message ID, and check whether that ID has already been processed. Webhook deliveries can be retried; using the message ID as an idempotency key avoids duplicate rows or repeated captures.
  3. Extract the URL: accept the URL format your workflow supports. Reject messages with no URL or multiple ambiguous URLs, and record a useful status instead of silently dropping them.
  4. Validate the destination: allow only http and https. Reject private or internal network targets, constrain redirects and response sizes, and avoid fetching arbitrary addresses from a privileged environment. A URL from a message is untrusted input.
  5. Record receipt: add a row with the timestamp, message ID, submitted and normalized URLs, and a status such as queued. If you create the row first, a later failure remains visible.
  6. Capture: call a browser screenshot service with the validated URL. Save the returned image or arrange a durable link to it.
  7. Update the row: set status to complete and write the screenshot link, or set status to failed and store a concise error category.
  8. Optional reply: send a brief result to the sender only if the intended messaging is permitted. Avoid turning a user-initiated request into unsolicited promotional messaging.

Suggested status values

Status Meaning
queued Accepted and waiting for capture.
processing A capture request is underway.
complete A screenshot was returned and its link was saved.
rejected The message or URL did not meet your input rules.
failed A capture or sheet update failed; the error field gives a short reason.

5. Apps Script orchestration example

This small example shows the Apps Script portion that calls a screenshot API and writes a result row. It is not a complete WhatsApp webhook receiver: it does not implement Meta webhook verification, inbound signature validation, event parsing, queueing, or URL security checks. Connect it to a properly secured event handler or automation platform, and provide a validated URL. Replace the example endpoint and credentials with the screenshot service you select.

function captureAndLog(validatedUrl, messageId, receivedAt) {
  const apiKey = PropertiesService.getScriptProperties().getProperty('SCREENSHOT_API_KEY');
  const spreadsheetId = PropertiesService.getScriptProperties().getProperty('SPREADSHEET_ID');
  const sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName('Captures');
  if (!apiKey || !sheet) throw new Error('Missing API key or Captures sheet');

  const response = UrlFetchApp.fetch('https://YOUR-SCREENSHOT-SERVICE-ENDPOINT', {
    method: 'get',
    payload: { access_key: apiKey, url: validatedUrl },
    muteHttpExceptions: true
  });
  const code = response.getResponseCode();
  if (code < 200 || code >= 300) {
    sheet.appendRow([receivedAt, messageId, validatedUrl, validatedUrl, 'failed', '', 'capture_http_' + code]);
    return;
  }

  // This example assumes the service returns a durable image URL as text.
  // If it returns image bytes, save them in a file store and write that file's link instead.
  const screenshotUrl = response.getContentText().trim();
  if (!/^https:\/\//i.test(screenshotUrl)) {
    sheet.appendRow([receivedAt, messageId, validatedUrl, validatedUrl, 'failed', '', 'unexpected_capture_response']);
    return;
  }
  sheet.appendRow([receivedAt, messageId, validatedUrl, validatedUrl, 'complete', screenshotUrl, '']);
}

Apps Script’s UrlFetchApp requires the https://www.googleapis.com/auth/script.external_request scope. Its reference documents a default request timeout of 360 seconds. Set an explicit, practical timeout or execution strategy appropriate to your workflow; do not rely on a long synchronous webhook request to finish a screenshot. See UrlFetchApp documentation.

6. Secure input, credentials, and stored data

  • Protect against server-side request forgery: restrict schemes to HTTP/HTTPS, block private and internal destinations, recheck destinations after redirects, and set redirect and response-size limits where your stack permits.
  • Validate webhook events: follow Meta’s current validation guidance; do not trust a request merely because it contains familiar fields.
  • Keep secrets out of rows and source code: store API credentials in a secrets facility or protected script properties and restrict editor access.
  • Minimize sender data: keep a sender reference only if it is necessary to deliver the result or investigate a failure. Define access and retention for screenshot links and message records.
  • Publish a privacy notice: explain what URLs and sender data you retain, why, and for how long. The reviewed sources do not establish the India-specific privacy, localization, or retention obligations for this exact flow; check authoritative current Indian sources and obtain legal review for your use case.

7. Messaging rules and India considerations

WhatsApp’s Business Messaging Policy makes the business responsible for required notices, permissions, and consents, and requires opt-in permission before contacting recipients. It also limits messages outside the 24-hour customer-service window to approved Message Templates. Keep this workflow focused on the user-initiated capture request, collect only the data needed, and check current policy before sending follow-ups. See the WhatsApp Business Messaging Policy.

This article does not determine which Indian privacy, data-localization, or retention rules apply to a particular operator. Those questions depend on the use case and require current authoritative legal review; do not infer a legal conclusion from the platform setup steps.

8. Performance, reliability, and cost

  • Respond promptly to webhooks. Acknowledge inbound delivery after safely recording or queueing the event, then do the slower screenshot and sheet work asynchronously when your automation platform supports it.
  • Make retries safe. Use the WhatsApp message ID as a deduplication key. Retry transient capture or Sheets failures with a bounded retry policy, and avoid making a second row for the same event.
  • Track each stage. Preserve a status and a short error category so that failed captures are diagnosable. Do not log API keys, full webhook secrets, or unnecessary message contents.
  • Set practical limits. Restrict accepted URL length, redirects, capture duration, image size, and concurrent jobs to what your chosen services support.
  • Estimate recurring cost from actual providers. The WhatsApp setup, no-code automation, screenshot rendering, storage, and any messaging can each have separate terms or charges. The research does not establish comparative prices, free quotas, India availability, or service benchmarks for these components; verify current pricing and data terms directly before production.

9. Troubleshooting

Symptom Likely cause Fix
No events reach the automation Callback is not publicly reachable over HTTPS, webhook setup is incomplete, or the app is not subscribed to the WABA event. Check the callback verification and event subscription in Meta’s current setup, and inspect endpoint logs.
The same message creates multiple rows A retry or repeated delivery is being treated as a new request. Store and check the WhatsApp message ID before capture and before appending another row.
Apps Script reports authorization failure The script lacks authorization for external requests or has not been authorized. Authorize the script and ensure the manifest includes https://www.googleapis.com/auth/script.external_request.
The result is HTML or blank instead of a screenshot The integration fetched a page’s HTML or the screenshot service returned a different response type than expected. Use a browser screenshot renderer and handle its documented response format, including image bytes versus a URL.
Some URLs fail while others work The target may redirect, block automated access, load slowly, or be invalid or unreachable. Record the failure category, validate redirects and destination, and adjust supported wait or timeout settings within the renderer’s limits.
Screenshot is saved but link later stops working The returned URL may be temporary or access controlled. Check link lifetime and permissions; copy the file into storage under your control if appropriate and update the sheet with its durable link.
The sender receives no reply Reply sending is not configured, or a messaging window/template rule applies. Check the send action and the current WhatsApp policy before using a template or following up.
The script times out or the webhook stalls Rendering or downstream writes are taking too long for a synchronous flow. Queue the work, acknowledge receipt promptly, and update the existing row when processing completes.

10. Or skip the browser setup

ScreenshotNeo is a website screenshot API and MCP server. One GET request takes a URL and returns a screenshot. Add its API call as the capture step in your automation; see the API documentation.

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)
open("shot.webp", "wb").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}`);
await Bun.write('shot.webp', res);

In a no-code tool, send a GET request to the same endpoint with access_key and url query parameters, then store the returned image or its retrievable link according to the tool’s response handling. ScreenshotNeo removes cookie banners, popups, and chat widgets before the shot; bot checks, blank pages, and failed loads are never billed. Its MCP server lets AI agents take screenshots. The free plan includes 1,000 screenshots a month with no card, and paid plans start at $5 for 3,000. Sign up for free: 1,000 screenshots a month, no card required.

11. Frequently asked questions

Can I make this entirely without code?

Potentially, if your chosen no-code provider supports the inbound WhatsApp webhook, secure request handling, screenshot API calls, and Google Sheets actions you need. Verify those capabilities rather than assuming that WhatsApp messages automatically appear in a sheet.

Does Apps Script take the screenshot itself?

No. UrlFetchApp makes HTTP requests. A browser-based screenshot service is a separate rendering step.

Can the workflow capture any URL a user sends?

It should not accept arbitrary destinations without checks. Validate the scheme and block internal or private targets, constrain redirects and resource use, and define what happens to malformed or ambiguous messages.

What should the sheet contain?

At minimum, record the message ID, submitted URL, status, and screenshot link, plus a timestamp and concise error when needed. Keep sender data only when the workflow requires it.