Skip to main content

The leads table

Every column and engagement status on the Leads page, and exactly what goes into the CSV export.

M
Written by Mike Lukasevicz

This page defines everything you'll see on the Leads table.

Who appears on this page

Leads lists campaign recipients: neighbors we actually entered into one of your campaigns. The page says so above the table:

Only neighbors we actually entered into one of your campaigns are listed here. Homes we pulled but never emailed are not shown.

That is a deliberate gate. Building a campaign pulls far more homes than it can email: some have no usable address, some fail email validation, some are held back. Those homes never became outreach, so they are not on this page. The practical effect is large. On one real campaign the list went from 1,549 pulled rows to 266 actual recipients, and every one of the 1,146 rows that failed email validation dropped out.

So the number here is not "homes we found". It is "people your marketing reached, or is about to reach". That is the number worth exporting and the number worth measuring against.

Columns

Column

What it holds

Name

The contact's name, as supplied by the data provider.

Email

The address your campaign sent to.

Phone 1 (unvalidated)

A phone number from the data provider. See the disclaimer below.

Phone 2 (unvalidated)

A second provider phone number, when one exists.

Campaign

The property address of the campaign this contact belongs to.

Distance

How far this contact's home is from that campaign's listing, in straight-line miles.

Status

What happened when we emailed this neighbor. See the engagement statuses below.

Last outreach

How recently this neighbor was emailed, bucketed: last 30 days, 30 to 90 days ago, 90+ days ago, or not sent yet.

About the Distance column

Distance is measured in a straight line from the contact's property to the listing the campaign is about — so it's a direct read on the radius you're farming. A contact 0.4 mi from the listing is a close neighbor; one at 2.8 mi sits on the edge of a wide tier.

A dash () means we can't measure it: either the contact's address or the listing's address hasn't been placed on the map yet. A dash never means "zero miles away" — an unmeasurable distance is left blank rather than guessed.

Engagement statuses

Status is not an email-validation verdict. It is the outcome of the outreach: what happened when we emailed this neighbor. There are exactly nine statuses, and each filter chip carries a live count so you can see the shape of a campaign at a glance.

They are listed here in the order they appear on screen, and that is the same order everywhere you see them — the chips above the table, the status column, and the filters.

Status

What it means

Interested

This neighbor replied and the reply reads as interested.

Not interested

This neighbor replied and the reply reads as not interested.

Follow up

You flagged this neighbor to come back to. Only you can set or clear this.

Opted out

This neighbor asked to stop hearing from you. We will not email them again.

Wrong person

Someone told us this contact is not the homeowner, or the contact was reported as the wrong person.

Replied

This neighbor replied, but the reply was neutral or an out-of-office auto-response.

Not replied

We have emailed this neighbor and nothing has come back yet.

Queued to send

Already in a campaign and waiting its turn. Sending starts shortly.

Undeliverable

The email bounced. This mailbox does not exist or rejected delivery, so we stopped emailing it.

Follow up is the only status you set yourself. The other eight are what the outreach did; this one is your own note that a neighbor is worth another go. You set it from the contact card in an open conversation — see Starring, flagging, and forwarding.

Note — Follow up starts empty

Nothing is flagged for follow-up to begin with, so the Follow up chip starts at zero and the filter shows an empty list. That is the chip working, not a filter failing.

One status per lead, and how ties are broken

A lead always has exactly one status. When more than one thing is true about a neighbor, the most certain fact wins, in this order:

  1. Undeliverable

  2. Wrong person

  3. Opted out

  4. Follow up

  5. Interested, Not interested, or Replied

  6. Queued to send

So a neighbor who replied and later bounced shows Undeliverable, not Replied. Undeliverable even outranks Opted out, because a bounce is a fact about the mailbox, not a choice the household made: the address simply does not accept mail.

Follow up sits above the three replied statuses because you set it after actually reading the reply, and our reading of a reply is only a guess — when the two disagree, yours wins. It stays below Opted out, Wrong person, and Undeliverable, because flagging someone for follow-up cannot put them back on a send list they asked to leave, or on a mailbox that does not accept mail. A neighbor you flagged who then opts out reads Opted out.

Note — A reply in your Inbox may not show on the row

Some replies cannot be matched back to a specific neighbor, so a reply you see in your inbox may not be reflected on that row. When that happens the lead still reads Not replied. Trust the Inbox for the conversation; use this column for the overall shape of a campaign.

The page opens on All, because the send gate has already removed the homes that were never emailed. Pre-filtering on top of that would hide real outcomes. The count line under the heading tells you when a filter is narrowing the view, for example "212 of 480 campaign recipients across 3 campaigns".

The Last outreach column and filter

Last outreach answers "how recently was this neighbor worked?". The dropdown above the table offers Last outreach: any time, Last 30 days, 30 to 90 days ago, 90+ days ago, and Not sent yet, and the column on each row shows the same bucket.

These are the same 30 and 90 day thresholds the coverage map on your front page uses to colour its dots green, amber, and red, so the two screens never disagree about how recently an area was worked. 90 days is also the point at which a neighbor becomes eligible to hear from you again, so the 90+ days ago bucket is effectively your re-touch pool.

The phone number disclaimer

Phone numbers are shown with this caveat, and it matters:

Provided by the data provider and not independently validated — these numbers are not verified as dialable or DNC-checked.

Grassfed validates emails, because email is what the platform sends. Phones pass through from the provider untouched. If you plan to call, you are responsible for checking numbers against do-not-call rules first.

When a campaign has no phone numbers at all

Some campaigns show a dash in both phone columns for every single lead. When that happens the page says so directly, in a note above the table:

No phone numbers were captured for this campaign — We began storing owner phone numbers on 6 August 2026. Leads pulled before then have none on file, so the Phone columns stay empty — this is not a display fault. Ask your account manager if you need them added.

That is the whole explanation: campaigns built before 6 August 2026 were assembled before the platform kept the provider's phone numbers, so there is nothing to show. Nothing is broken and no filter is hiding them — the numbers were never stored. If you need phones for one of those older campaigns, ask your account manager; recovering them means re-querying the data provider, which they arrange.

The note only appears when the list you are looking at has no phone numbers whatsoever. A single lead with an empty phone cell is ordinary — the provider simply had no number on file for that owner — and does not trigger it.

The CSV export

Download CSV exports the rows currently visible: your active status, last-outreach, campaign, and search filters all apply. The file is named grsfd-leads-YYYY-MM-DD.csv (dated for the day you download it) and contains these columns:

Name · Email · Phone 1 (unvalidated) · Phone 2 (unvalidated) · Campaign Address · Distance (mi) · Engagement Status · Last Outreach · Source · Is Duplicate · Last Sent

Engagement Status holds the label text you see on screen, such as Undeliverable. Last Outreach holds the bucket label, such as 30 to 90 days ago. Together they replace the single Status column the export used to carry.

Distance (mi) holds the plain number (the unit is in the header) so you can sort and average it in a spreadsheet. When the distance is unmeasurable the cell is empty rather than a dash, because a blank keeps the column numeric.

The "(unvalidated)" qualifier is baked into the CSV's own column headers on purpose: a spreadsheet outlives the screen it came from, so the caveat travels with the data. Source (the data vendor), Is Duplicate, and Last Sent appear only in the export, not on the page.

Did this answer your question?