LONELY PINE AI Prepared for Equipped Painting
Walkthrough · 28 July 2026

Tracking a lead before it becomes a job

Your sheet already tracks where leads come from. What it cannot do yet is tie a lead to the job it became. That takes one ID.

For
Mitchell, Daniel, Juan
Sheet
2026 Sales & Production Costing
Change
Two columns
The one idea

A join key

Today the story starts at the appointment. To bring lead data in, we move the start line back to the lead and give every lead one stable ID that rides along through appointment, sold and produced.

DripJobs already creates that ID the moment a lead exists. Nothing new gets invented.

Names can never be the link. Jennifer Carroll appears twice in your own history as two different jobs. So does Arden Dougan. Names collide, get misspelled, and change. IDs do not.

Where you actually are

Further along than it feels

Lead Source already exists on all four tabs, along with City, Location Code and Tax Rate. Nothing there needs adding. Two things are missing, and they are the whole problem.

0
Tabs with a DripJobs ID
There is no join key anywhere, so nothing can be tied to anything except by name.
No
Lead date on Sales Tracking
The earliest column is Estimate Scheduled. The funnel literally starts at the appointment.
47
Spellings of ~12 channels
Found in the all-time export. Not carelessness - a side effect of the retype below.
Production Costing header row showing Lead Source, City, Location Code and Tax Rate columns
Your Production Costing tab. Lead Source, City, Location Code and Tax Rate are already here. There is no DripJobs ID column anywhere on it.

The retype is the actual leak

A job passes through four tabs, and the same five fields are entered by hand at every one.

Sheet tab strip showing Leads, Appmts/Sales Tracking, Sold Jobs Feed and Production Costing
The four tabs a job passes through, in your sheet today.
Tab 1
Leads
Job Name
Lead Source
City
Location Code
Tax Rate
Tab 2
Appmts / Sales Tracking
Job Name
Lead Source
City
Location Code
Tax Rate
Tab 3
Sold Jobs Feed
Job Name
Lead Source
City
Location Code
Tax Rate
Tab 4
Production Costing
Job Name
Lead Source
City
Location Code
Tax Rate

That is where attribution drifts. A lead entered as Google LSA on tab one becomes Google on tab two and website by tab four.

The point

With an ID on the row, Lead Source is entered once at first touch and the later tabs inherit it. This change is less typing, not more.

The list

One locked set of sources

These live on the Dropdown Data tab, with Reject input switched on so a typo cannot get in. Where this differs from what you already have, yours wins - except the two splits below.

Google LSAGoogle AdsWebsite SEO/GMBMetaThumbtackYelpAngi AdsBBBContractor HotlineRepeat/ReferralNetworking/EventsYard Sign/VehicleOutbound/CanvassingOtherUnattributed

Google is three lines, because it is three costs

$539
Google LSA
Cost per sale, your 2026 numbers.
$1,347
Google Ads
Two and a half times LSA. Averaging them hides which one to feed.
184
Rows saying only "google"
Could be either, or organic. These now report as Unattributed.

Reporting a bare google as Unattributed rather than guessing is deliberate. Guessing is how the website channel came to look like a 65x return: paid leads that landed on the site were counted as free. An honest gap beats a flattering wrong number, and the dropdown is what shrinks the gap.

Reassurance

No history is lost

Every existing spelling maps forward automatically. Nothing needs cleaning by hand.

What DripJobs says todayReports as
facebook ads, Facebook Ads, facebook, instagram, FMM FB Lead FormMeta
Google Local Services Ads, Google LSAGoogle LSA
Google Ads, google_ads, Call Ads ExtensionsGoogle Ads
Google Business Profile, Google My Business, Google Organic, website, Website PoolWebsite SEO/GMB
word of mouth, repeat customer, Client Referral, BHG ReferralRepeat/Referral
THG 2026 Trade Show, TRE 2026 Trade ShowNetworking/Events
contractor hotlineContractor Hotline
door to door, Cold CallOutbound/Canvassing
VehicleYard Sign/Vehicle
google, phone call, email, No Lead SourceUnattributed
Spam, TestNot counted as leads at all
The build

Your Leads tab, pre-filled

The Leads tab is empty today, so there is nothing to migrate. This is the header row it gets. The two navy columns are the only genuinely new fields - everything else already exists elsewhere in the sheet.

Lead DateLead SourceDripJobs IDJob NameSalespersonCurrent StageAppt DateStatus
2026-07-24-0789508238cbb6…Karey JensenMitchellLeadOpen
2026-07-21-229500615776550…Clem - Lynnwood 3070343IsmaelEstimate sent2026-07-22Open
2026-07-11Google Business Profile-Kearns, RachelleSophiaLeadNot booked
2026-07-10Facebook Ads-Langan, HelgaSophiaLeadNot booked

New columns. Everything else is copied from what your other tabs already track.

We pre-fill 273 rows so nobody backfills by hand

Your team does not start from a blank tab. We hand it over already populated:

38
Live pipeline rows
ID, date, source, stage and salesperson. Your open deals, ready to work as-is.
235
Open lead rows
Real source and date, no ID - and none needed. They count toward their channel now, and pick up an ID by themselves if they ever progress.
273
Total, May onward
Older leads deliberately excluded - pasting dead 2023 leads would distort every rate.
No back-filling

Nobody types in 235 IDs. A lead that never books has nothing to join to, so it only ever needs a date and a source, which it already has. The ID matters the moment a lead moves - and at that moment DripJobs sends it to us automatically. The only new habit is on leads arriving from now on.

What it cost to build those 38 rows

The live feed gives an ID and no source. The export gives a source and no ID. So filling in those 38 meant cross-referencing three separate exports and matching on customer name, including unpicking the doubled names DripJobs writes for nameless deals (CHAPMAN JOEL CHAPMAN JOEL).

It worked - 38 out of 38 - but it is reconstruction, and it is not repeatable every week. One ID on the row is what replaces all of that. That is the whole argument for the two new columns, in one paragraph.

Two caveats worth saying plainly rather than burying:

For the 38 live rows the date is when Steward first saw the lead, not necessarily when DripJobs created it, because our capture only starts 10 July. Fine as a start date, not safe to measure sales-cycle length from. Rows created from here on carry the real date.

And one row - 2909 223RD PL SW, Thumbtack, appointment booked 13 July - appears in the 12 July export but is missing from the 27 July one. It is flagged in the file. Worth a look at whether deals are being renamed or deleted, since a second one behaved the same way.

Next steps

Who does what

WhoDoes whatWhen
Daniel & JuanAgree who enters the DripJobs ID and Lead Date, and at what moment a lead comes in. You two are doing this, so you define it, not us.On this call
MitchellSign off the source list, or send edits. We compare it against your Dropdown Data tab live.On this call
NaluBuild the Leads tab and seed it. Done 28 July - 253 rows back to 7 May, dropdowns locked, tax lookups wired, 41 already pushing to Steward.Same day
NaluInstall the sync script. Done 28 July - running on Nalu's account for now. It runs as whoever installs it, so it should move to Nicole once proven, since an owner's account outlives a consultant's.Move it later
JuanConfirm one reading: a bare "Facebook" or "Instagram" source is treated as organic, not paid. About 36 historical rows turn on it.This week
MitchellConfirm what "Mail" means on the source list. Parked in Other until we know whether it is direct mail or inbound email.This week
EveryoneEvery lead gets a row the day it arrives, booked or not, with a source picked from the dropdown.From this week
NaluWire cost per lead and cost per sale by channel into Steward, and switch on sales-cycle length.Once leads flow

Two decisions we need from Mitchell

1. When a job hits "Project Accepted", should it move onto the production board?

Sounds small, is not. It is the same sold-definition question from last time: proposal-accepted (447 jobs) or completed (645). Your answer decides whether we let those events through or correct them at the source.

2. How should Daniel's work show up?

The DripJobs feed is keyed on the salesperson of record. Daniel is the pre-closer and is never the salesperson of record, so the system structurally cannot see his activity today. Either DripJobs starts assigning him on the leads he sets, or his view keys off his own activity instead. This is a business decision, not a technical one.

What changes on Monday

Three habits

  1. Start the row at the lead, not the appointment.Every lead gets a row the day it arrives, including the ones that never book. A channel's cost per sale is meaningless if only the leads that booked were recorded. The dead leads are what tell you a channel is expensive.
  2. Pick the source at first touch, from the dropdown.Whoever takes the call or the form picks it right then. The channel that produced the lead owns it for life, so a later, vaguer correction cannot overwrite it.
  3. Paste the DripJobs ID.It is the only thing tying the lead to the job. Everything else follows from it.
Shipped 28 July

Moving a lead through the sheet

The Leads tab is live, seeded with 253 leads back to 7 May, and pushing to Steward on every edit. Here is the whole of what changes day to day.

A lead arrives

  1. Add the row on the Leads tab, the day it arrives.Booked or not. The ones that go nowhere are the whole point: they are what tell you a channel is expensive.
  2. Pick the source from the dropdown.It rejects anything not on the list, so a typo cannot become a 48th spelling. Facebook and Facebook Ads are now different sources, so paid and organic report separately. Bare "Google" is gone from the list, because it could mean Ads, LSA or organic and those differ about 2.5x on cost per sale.
  3. Paste the DripJobs ID.The cell turns amber if there is a job name without one, so the gap is visible while you are still in the row rather than a month later.
  4. Pick the City from the dropdown.Location Code and Tax Rate fill themselves in. Month fills itself from Lead Date. Those three are formulas, so do not type in them.

The lead books an appointment

Select columns A to F on the Leads row, copy, paste onto Appmts/Sales Tracking. That is the transfer. Those six columns are in the same order on both tabs specifically so this is one paste and not five fields retyped.

Then paste the DripJobs ID and Lead Date into the two new columns at the far right of that tab. Lead Date is what makes "how long from first contact to sale" answerable, which is the number that does not exist today.

The one habit that carries everything

The ID rides with the job all the way to Production Costing. Enter the source once, at first touch, and every tab downstream inherits it instead of asking someone to remember. Re-typing it at each stage is exactly how a lead entered as Google LSA arrives as website three tabs later.

What has not changed

Sophia still copies from Sold Jobs Feed into Production Costing by hand, on purpose, so each job lands in the month it was produced. Nothing about job costing, invoicing or the crew workflow moves. The only new work is the lead row and the ID.

Then it stops being manual

What Steward does with it

Leads arrive from DripJobs the moment they are created, carrying the same ID and source. Steward advances the one record through each stage as events fire, so nothing is entered twice.

Cost per lead and cost per sale by channel go live. Sales-cycle length - days from lead to purchase - starts reporting as leads captured from now on begin to close.

The sheet keeps working the whole time. Steward reads it rather than replacing it, so there is no cutover day where anything stops.

Expect this

The first month of full-funnel numbers will look worse than what you see today. That is the honest denominator arriving, not performance dropping. Channels that looked efficient because their dead leads were never recorded will move toward their real cost.