DOC.08LIAP

๐Ÿ“Š Data & CSV Schema

โ† Home


connections.csv

Logs every connection request sent.

FieldTypeExample
sent_atdatetime2026-02-20 15:26
namestringTomer Fuss Sanderovich
rolestringCPO @ Natural Intelligence
companystringNatural Intelligence
profile_urlstringhttps://linkedin.com/in/tomer-...
scoreint85
scorerstringAI or keywords
notestringConnection note text sent

Used for: deduplication (don't connect twice), ring widget counts, Results tab table.


messages.csv

Logs every first message sent.

FieldTypeExample
sent_atdatetime2026-02-20 15:26
namestringTomer Fuss Sanderovich
rolestringCPO @ Natural Intelligence
profile_urlstringhttps://linkedin.com/in/tomer-...
messagestringFull message text sent

Used for:

  • Dedup in Msg Prospect (skip if profile_url already logged)
  • Seed source for followups.csv
  • Original message reference for follow-up AI prompt
  • Msg Prospect tab table

Manual entries: You can add rows manually to prevent the tool from messaging someone you've already contacted outside the tool. Set profile_url correctly for dedup to work; leave message blank or add a note.


followups.csv

Tracks the full follow-up lifecycle per connection.

FieldTypeExampleNotes
profile_urlstringhttps://linkedin.com/in/tomer-...Primary key (normalized)
namestringTomer Fuss Sanderovich
rolestringCPO @ Natural Intelligence
first_msg_sent_atdatetime2026-02-20 15:26Copied from messages.csv
follow_up_sent_atdatetime2026-02-21 13:57Set when follow-up sent
replied_atdatetime``Set when reply detected
statusstringfollowed_upSee below

Status Values

pending      โ†’ first message sent, no follow-up yet
replied      โ†’ they replied (reply detected in thread)
followed_up  โ†’ follow-up sent, waiting
done         โ†’ reserved for future use

How followups.csv is populated

  1. Auto-seeded from messages.csv each time a follow-up run starts (seed_followups_from_messages โ€” idempotent)
  2. Updated by upsert_followup() which matches on normalized profile_url and updates fields in-place

Manually editing followups.csv

You can freely edit the file:

  • Change status back to pending to re-trigger a follow-up
  • Set first_msg_sent_at to an older date to test timing logic
  • Set status=replied to prevent follow-up to someone who replied outside LinkedIn

URL Normalization

All profile URLs are normalized before comparison:

url.split("?")[0].rstrip("/").lower()

# Example:
# https://www.linkedin.com/in/tomer-fuss-sanderovich/?lipi=xyz
# โ†’ https://www.linkedin.com/in/tomer-fuss-sanderovich

This ensures dedup works regardless of tracking parameters LinkedIn adds to URLs.


Data Privacy

IMPORTANT โ€” Your data stays local

  • All CSV files are in .gitignore (*.csv) โ€” never committed
  • Log files are in .gitignore (*.log) โ€” never committed
  • No analytics, no telemetry, no cloud sync
  • If using Ollama: message content never leaves your machine
  • If using Gemini: message prompts are sent to Google's API