BULK BACKLOG RECOVERY · FACEBOOK MESSENGER · PHILIPPINES
Messenger Lead Capture Automation
The Problem
"On busy days it simply didn't happen -- leaving backlogs of hundreds of uncontacted applicants sitting in Messenger for weeks."
Acadsoc runs tutor applicant ads on Facebook that drive leads through Messenger. Applicants send their name, email, and phone number unprompted -- but the lead coordinator was manually copying each one into a Google Sheet one by one. At 50-100 leads per day, that was 1-2 hours of pure data entry daily. The backlog problem had been ongoing for months, with 78,000+ historical conversations sitting unprocessed.
Bulk Import Workflow
Acadsoc Messenger Bulk Import v2 (Auto-Paginate) — actual n8n node flow:
Runs on schedule, checks cursor state, paginates until done, extracts leads, filters out empty rows, appends to Sheet7.

How It Works
Daily Sync — Passive Extraction
Runs twice daily at 8am and 8pm Manila time. Fetches all new Messenger conversations since the last run via the Facebook Graph API, extracts name, email, and phone via regex, and appends to Google Sheets. Saves a lastRunTime timestamp after each run so the next picks up exactly where it left off -- zero duplicate risk.
Regex-Based Lead Extraction
Applicants already send their information in their first message without being prompted. The workflow reads what's already there -- name from Messenger participant metadata, email and phone via regex pattern matching. No bot interaction required.
Bulk Import — Cursor-Based Pagination
A one-time run that paginated through 78,000+ historical conversations in batches of 100 every 3 minutes. Each batch saved its cursor to n8n static data so the next batch continued exactly where it left off. Stopped automatically once it reached data already covered by the existing manual export.
Structured Output to Google Sheets
All leads land in a single sheet: Name, Email, Phone (10-digit PH format), Timestamp. Formatted for direct upload into the Acadsoc system. No reformatting needed downstream.
Key Engineering Decision
"The best automation doesn't change user behavior. It reads what users already do."
The original build used a webhook bot that proactively asked applicants for their information step by step. It worked -- but it added unnecessary friction. Applicants were already sending their name, email, and phone in their first message without any prompting.
Scrapping the bot and switching to passive extraction simplified the system from 9 nodes to 6, eliminated state management overhead entirely, and removed a silent failure mode where conversations could get stuck mid-flow if someone answered out of order. Fewer moving parts, same output, zero friction for the applicant.
Navigating Scale
The initial estimate was around 4,500 historical conversations. The actual number was 78,000+. A single-run attempt to paginate all of them caused bad gateway errors from the Graph API.
The fix: cursor-based pagination in batches of 100, every 3 minutes, with the cursor saved to n8n static data between runs. Each batch completed in under 7 seconds. The bulk import recovered 6,000+ leads in a single session -- work that would have taken weeks done manually.
Results
Have a similar lead capture problem?
Messenger, Instagram, web forms -- same approach applies.