Few days ago I built a LinkedIn outreach automation in n8n using Unipile and Google Sheets for database
I also used codex and claude code to plan and design the architecture.
The flow creates campaign rows, sends connection requests, checks if people accepted, sends message 1 and follow-ups after 48 hours if there is no reply, stops when a reply comes, and tracks everything in the sheet.
I split it into six workflows so each part is easier to debug and maintain: campaign setup, connection sending, acceptance polling, message sending, reply webhook, and daily counter reset.
- First it creates campaign rows from prospects.
- Then it sends connection requests.
- Another workflow checks if those requests are accepted.
- Once accepted, the message sender sends message 1 and follow-ups after 48 hours if there is no reply.
- A webhook listens for replies and updates the sheet.
- A reset workflow clears daily counters.
I used Google Sheets as the operating database but for production scale, I would move state, counters, and logs to Postgres or Supabase because Sheets is not atomic.