Mehrdad Fashami

Eight problems, and what I did about them.

Engagements I have taken on, each tagged with the outcome it was judged against. Every one crosses more than one system — which is usually why it landed with me rather than with a specialist inside one of them.

Client names are withheld under confidentiality, so each engagement is identified by sector. Everything else — the problem, the work and the result — is as it happened.

Case 01Reporting AutomationMulti-channel training provider

30 hrs → 2 hrsper week

Problem

A recurring management reporting process relied on manual exports from five platforms, spreadsheet updates, data checks and repeated reconciliation. By the time the numbers were agreed, the week they described was already over.

What changed

The workflow was rebuilt around scheduled data pipelines, a modelled reporting layer with agreed KPI definitions, automated validation rules and alerting when a source stops delivering.

Outcome

Reporting preparation dropped from roughly 30 hours per week to around 2 hours of review and validation. Numbers now arrive before the meeting instead of after it.

  • BigQuery
  • n8n
  • Power BI
  • Google Ads
  • Meta Ads
  • Stripe
Weekly reporting process
BEFORE — MANUAL — ~30 HRS / WEEKEXPORTCLEANMERGECHECKFIXSENDAFTER — AUTOMATED — ~2 HRS / WEEKPIPELINEVALIDATEPUBLISHHUMAN REVIEW2 HRS
93%
Less manual preparation
6
Sources consolidated
Daily
Refresh instead of weekly
Case 02360° Lead & Sales IntelligenceSubscription business with an outbound sales team

One customer.One view.

Problem

CRM records, call activity, marketing source data and payment history lived in four systems. Nobody could answer a simple question — what actually happened with this customer — without opening four tabs and guessing.

What changed

Lead, call, opportunity and payment signals were resolved to a single customer identity, cleaned of duplicates, and combined into one unified view with follow-up quality and pipeline movement made visible.

Outcome

Sales teams and management gained one clear picture of customer activity, follow-up and opportunity status — including the leads that had never been contacted at all.

  • Salesforce
  • Aircall
  • GoHighLevel
  • Chargebee
  • PostgreSQL
Unified customer record

Sources joined

4

To first call

11 min

Record status

Complete

  1. META ADSClicked campaign · Q3 Webinar
  2. GOHIGHLEVELForm submitted · 14:02
  3. SALESFORCELead assigned · owner set
  4. AIRCALLOutbound call · 4m 12s · connected
  5. SALESFORCEOpportunity created · £14,400
  6. CHARGEBEESubscription active · annual
4 → 1
Systems to check
100%
Calls matched to CRM records
Visible
Follow-up quality per rep
Case 03Revenue AttributionPaid-acquisition-led business, multiple markets

Marketing → Revenueend to end

Problem

Marketing spend, lead activity and closed revenue were held in separate systems with inconsistent campaign naming. Channel performance was argued about monthly and never settled.

What changed

Campaign, lead, opportunity and payment data were connected through one attribution model, with enforced naming standards, validated tracking and revenue joined back to the original acquisition source.

Outcome

Management could finally see which channels and campaigns were contributing revenue rather than volume — and move budget on evidence instead of opinion.

  • Google Ads
  • Meta Ads
  • LinkedIn Ads
  • GA4
  • BigQuery
  • Stripe
Acquisition to revenue
SpendRevenue attributed
  • Google Ads

  • Meta Ads

  • LinkedIn Ads

  • Organic / direct

Same spend, redistributed. The channel with the largest budget was not the channel producing the revenue.

Spend → £
Joined at customer level
3
Ad platforms reconciled
CAC / ROAS
Reported on real revenue
Case 04CRM Data RecoveryB2B services group, two prior migrations

31% → 0.4%duplicate records

Problem

Years of imports, manual entry and two migrations had left duplicate companies, contacts attached to the wrong parent, ownership that no longer matched the team, and campaign names that never agreed with the ad platform. Every report began with an argument about the data rather than the result.

What changed

Deduplication on deterministic keys first and fuzzy matching second, with a documented survivorship rule for which value wins. Ownership was rebuilt from an agreed source of record, campaign naming was enforced at the point of entry, and the validation now runs nightly instead of once during a cleanup project.

Outcome

The CRM moved from a system people worked around to the one people quote. The duplicate rate stays under half a percent because the rules run continuously rather than as a one-off exercise.

  • Salesforce
  • Python
  • BigQuery
  • n8n
Deduplication, one account
  • Northgate LtdImport 2021
  • Northgate LimitedManual entry
  • NORTHGATE LTD.Migration
  • Northgate LtdSurvivorship applied

Deterministic keys first, fuzzy match second, and a written rule for which field wins. The same rules then run nightly.

0.4%
Duplicate rate, sustained
Nightly
Validation instead of ad-hoc
1
Agreed source of record
Case 05Dormant Opportunity RecoverySubscription business, five years of history

£240ksurfaced from records already owned

Problem

Leads that were never contacted, opportunities abandoned mid-pipeline, and customers who had lapsed quietly. All of it sat in systems nobody queried, because answering the question meant joining four of them by hand.

What changed

Every dormant record was scored against last contact, acquisition cost, previous value and the stage it stalled at — then surfaced as a working queue with the reason attached, refreshed each morning rather than exported once.

Outcome

The sales team gets a daily list of real opportunities drawn from data the business had already paid for, instead of a static export that goes stale within a week.

  • Salesforce
  • Chargebee
  • BigQuery
  • Power BI
Dormant records, by reason
  • Never contacted1,240£71k
  • Stalled at proposal890£96k
  • Lapsed customer1,610£58k
  • Contacted, no follow-up1,060£15k

4,800 records, scored on last contact, acquisition cost and stage at stall.

4,800
Records re-scored
£240k
Pipeline surfaced
Daily
Queue refresh
Case 06Call IntelligenceHigh-volume inbound sales team

Every call,actually read

Problem

Several hundred calls a week, each logged as a duration and a disposition picked from a dropdown. Managers sampled a handful; the rest was invisible. Objections, competitor mentions and pricing pushback never reached a report.

What changed

Calls are transcribed, then classified against a taxonomy the sales team agreed to — outcome, objection, competitor named, next step committed — and written back onto the CRM record. The model summarises and tags; the rep still decides what happens next.

Outcome

Management can see what customers actually said, at full volume rather than by sample. Coaching moved from anecdote to the objection the numbers kept pointing at.

  • Aircall
  • Python
  • Salesforce
  • BigQuery
One call, classified

Transcript · 06:42

“It is not the price. We looked at this two years ago and the rollout took most of a quarter, so I need to know what that looks like before I take it to the board.”

Outcome
Follow-up booked
Objection
Implementation time
Competitor
Named — incumbent
Next step
Proposal by Thursday

Written back to the record the same day. The model tags; the rep decides.

100%
Of calls classified
6
Objection categories tracked
Same day
Written back to the record
Case 07One Warehouse, Three BrandsGroup operating three trading brands

9 sources.One model.

Problem

Three brands, three CRMs, two ad accounts each, and a finance system that knew nothing about any of them. Group-level questions took a week and produced a spreadsheet nobody fully trusted.

What changed

A warehouse with one modelled layer above it: shared customer and campaign dimensions, brand carried as a column rather than as a separate report, and every definition agreed in writing before anything was built.

Outcome

Group and brand numbers now come out of the same model, so they cannot disagree with each other. New sources plug into the existing shape instead of starting another spreadsheet.

  • BigQuery
  • Python
  • n8n
  • Power BI
  • Salesforce
  • HubSpot
Sources against conformed dimensions
SourceCustomerCampaignRevenue
Salesforcefeeds Customerfeeds Campaigndoes not feed Revenue
HubSpotfeeds Customerfeeds Campaigndoes not feed Revenue
GoHighLevelfeeds Customerfeeds Campaigndoes not feed Revenue
Google Adsdoes not feed Customerfeeds Campaigndoes not feed Revenue
Meta Adsdoes not feed Customerfeeds Campaigndoes not feed Revenue
GA4does not feed Customerfeeds Campaigndoes not feed Revenue
Stripefeeds Customerdoes not feed Campaignfeeds Revenue
Chargebeefeeds Customerdoes not feed Campaignfeeds Revenue
Xerodoes not feed Customerdoes not feed Campaignfeeds Revenue

Brand is a column on every one of them, not a separate report.

9
Sources conformed
1
Shared dimensional model
Both
Group and brand from one source
Case 08Lead Routing & Follow-upInbound-led services business

2 hrs → 4 minfirst response

Problem

New enquiries landed in a shared inbox and were picked up by whoever noticed first. Response time depended on the hour of the day, and nobody could see which leads had been left alone.

What changed

Validation, enrichment and routing on rules the team agreed — territory, value band and current load — with an SLA clock running on every record and an escalation when it expires.

Outcome

First response fell from around two hours to four minutes. Leads that slip are now visible before the week ends rather than after the quarter does.

  • GoHighLevel
  • Salesforce
  • n8n
  • Slack
Inbound lead handling
BEFORE — SHARED INBOX — ~2 HRSARRIVESNOTICEDCLAIMEDCHECKEDASSIGNEDCALLEDAFTER — ROUTED ON RULES — ~4 MINVALIDATEENRICHROUTESLA CLOCK4 MIN
4 min
Median first response
0
Leads unassigned overnight
Per rep
SLA performance visible

Have a messy system?

That is usually where I can help.

Tell me what is not working, what is still manual, or what you cannot currently see clearly. If it is not something I should take on, I will tell you that too.

hello@mehrdadfashami.com