π Find businesses with unanswered reviews using Apify, Supabase and Google Sheets
β‘ 3 views Β· π Market Research & Insights
π‘ Pro Tip β HTTP Request scraping tends to break when sites update their markup. If youβre scraping a major platform, check if ScraperNode covers it β it has maintained scrapers for LinkedIn, Instagram, TikTok, YouTube, and 20+ other platforms that return structured data.
Description
Quick overview
This workflow receives a category and location via webhook, uses Apify to scrape recent Google Maps reviews, ranks businesses with unanswered low-star reviews, stores the opportunities in Supabase (Postgres), creates and shares a Google Sheet report, and returns the results and sheet link in the webhook response.
How it works
- Receives a POST webhook request containing a business category and location (and optional rating/review count/result limits).
- Validates and normalizes the input parameters, then creates a βrunningβ request record in Supabase (Postgres).
- Calls Apifyβs Google Maps Reviews Scraper to fetch reviews for the requested search term and captures errors if the scrape fails.
- Groups the scraped reviews by business and identifies low-star (β€2) reviews that have no owner reply.
- Scores and ranks businesses that meet the minimum rating and review-count thresholds, then stores the top results as opportunities in Supabase.
- Creates a new Google Sheet, writes the headers and ranked opportunities into it, and shares the sheet publicly as read-only.
- Marks the request as completed in Supabase and responds to the webhook with the ranked results and the Google Sheet URL.
Setup
- Add credentials for Supabase Postgres, an Apify HTTP Header Auth token (Authorization: Bearer <YOUR_APIFY_TOKEN>), Google Sheets OAuth, and Google Drive OAuth.
- Create the Supabase tables
automation_requestsandopportunitieswith the columns expected by the workflow (including UUIDautomation_requests.idand JSONB fields likeinput_jsonandopportunities.evidence). - Configure the webhook URL in the calling app (for example, Lovable) and send at least
categoryandlocationin the POST body (optionallymin_rating,min_review_count, andmax_results). - Review the Google Drive sharing behavior before activation, since the workflow grants βanyone with the linkβ reader access to the created sheet.
π Nodes Used
Google Sheets, HTTP Request, Postgres, Webhook, Google Drive
π₯ Import
Download workflow.json and import into n8n:
Workflow menu β Import from File