STEFANO ROSSI
Independent consultant IT

I work on advertising, data and marketing systems.

I work as an independent consultant with companies and agencies.

I handle advertising, measurement and analysis, and I build systems and automations around marketing processes.

Depending on the project I can run part of the work directly, work alongside whoever is already handling it, or step in on one specific problem.

{{ c.num }} {{ c.label }}

01

Advertising

I work mainly on Google Ads, Meta Ads and TikTok Ads.

I can run advertising directly, or work together with an in-house team or the agency already in place.

Strategy, execution and responsibility depend on the project.

I don't start from a predefined package: I try to understand what is needed, what already exists, and where I can actually be useful.

02

Data

I work on measurement, tracking, reporting, dashboards and analysis.

The goal isn't to collect as much data as possible, but to have information reliable and clear enough to actually use when deciding.

Sometimes that means building a new measurement setup.

Other times it means connecting different sources, making reporting more useful, or simply understanding the data that already exists.

03

Systems

I design automations and systems that connect advertising, analytics, CRM, reporting and other marketing tools.

I'm interested in automation when it makes a process more stable, repeatable and efficient.

It can make information available at the right moment, keep different systems in sync, run tasks that are hard to sustain by hand, or make possible something that wasn't before.

I don't see automation as a way to take value away from the work.

I'm interested in using it to build systems that create more of it.

Built

Four systems I built, shown in action rather than described in words.

Example 01 / 04

System 01 · data Nightly data flow 03:00

No one opens a spreadsheet or exports anything manually.

Nightly runRun
L1extraction
L2normalisation
L3contracts
L4metrics
L5aggregation
L6client view
L7write
Database updated
Nightly log

03:00:04 meta · 1,284 rows

03:00:11 google · 902 rows

03:00:39 normalised 2,186

03:01:07 metrics calculated

03:01:22 aggregated · 6 clients

03:01:48 database write ok

Database
Rows processed2.186
Clients updated6
Last run03:01
Next runtomorrow 03:00

The dashboard, reporting and everything else read from here.

Menu

Pipeline · 03:00

Run
L1 extract
L2 normalise
L3 contracts
L4 metrics
L5 aggregate
L6 client view
L7 build

Log

03:00:04 meta · 1,284 rows

03:00:11 google · 902 rows

03:00:39 normalised 2,186

03:01:07 metrics calculated

03:01:22 aggregated · 6 clients

03:01:48 database write ok

Database updated

01 · Data collection

Every night a process downloads the previous day’s paid-platform data, normalises it in seven steps and writes it to a database. Nobody opens a spreadsheet or exports anything manually.

Raw data from one platform cannot be compared directly with another, and reporting that depends on someone remembering to update it eventually stops working.

Open the flow →
System 02 · reporting Platform sync 03:00

One place instead of six separate platforms.

Spend€ 412,8K
Impression128,4M
CTR0,42%
Cost/view€ 0,037
Budget delivered0 € · 0%
Allocation by client
Cortesi Moda€ 96,0K · 23%
Vivace Retail€ 88,0K · 21%
Banca Restelli€ 74,0K · 18%
among the bestCollection backstageCortesi Moda · 4,2M views
among the worstSavings-plan explainerBanca Restelli · 1,1M views
among the bestHand engraving, close-upAliano Gioielli · 2,1M views
among the bestCollection backstage
Viewed for 3 seconds38%
Cost/view€ 0,024
Classified comments
Positive61%
Price questions29%

The hook in the first two seconds is a close-up face, not the product.

Client budget
40.000
Safety margin18%
Expected cost at this budget
CPM€ 3,21
CPC€ 0,77
Cost/view€ 0,037
Menu

Platform

Overview
Clients
Active campaigns
Creatives
Analysis

Overview · last 28 days

PaidAll clients
Spend 84.200 € +12%
Impressions 12,4 M +8%
Video views 3,8 M +21%
Click 148.320 +6%
CTR 1,42% +0,11 pt
CPM 6,80 € −4%

Spend by client

Cortesi Moda 24.100 €
Vivace Retail 18.640 €
Banca Restelli 14.250 €
Nordest Turismo 11.020 €
Aliano Gioielli 9.480 €
Studio Ferrini 6.710 €

Performance by objective vs benchmark

Video views 32.400 € Cost/view 0,027 € +16%
Traffic 26.180 € CPC 0,34 € +9%
Conversions 15.900 € CPA 18,40 € −21%
Reach 9.720 € CPM 5,90 € on benchmark

Concentration · top 3 clients 61% · HHI 0,21

Clients · 6 active

ClientSectorBudgetDeliveryCTR
Cortesi Moda Fashion 96.000 € 78% 0,54%
Banca Restelli Financial services 74.000 € 61% 0,31%
Vivace Retail Retail 88.000 € 92% 0,47%
Nordest Turismo Travel 61.000 € 44% 0,62%
Aliano Gioielli Luxury 52.000 € 83% 0,39%
Studio Ferrini Education 41.800 € 55% 0,71%
← Clients Cortesi Moda Fashion · 4 active ads
Budget96.000 €
Spent0 €
Delivery0%
CampaignAdEndSpendCTRKPI vs benchmark
Always on · VV Backstage collezione autunno 30/09 9.240 € 0,81% Cost/view −22% vs benchmark
Always on · VV Vetrina statica con logo 24/08 4.180 € 0,17% Cost/view +38% vs benchmark
Summer sale · Traffic Confronto prezzi in vetrina No end date 6.920 € 0,63% CPC −11% vs benchmark
Summer sale · Traffic New arrivals carousel No end date 3.060 € 0,29% CPC on benchmark

Creatives · Cortesi Moda

Video viewsTraffic

Best

Backstage collezione autunno 4,2 M views · CTR 0,81% · Cost/view 0,024 € Cost/view −22% vs benchmark
Trying clothes in the fitting room 2,6 M views · CTR 0,68% · Cost/view 0,029 € Cost/view −9% vs benchmark

Worst

Vetrina statica con logo 910 K views · CTR 0,17% · Cost/view 0,071 € Cost/view +38% vs benchmark
New arrivals carousel 640 K views · CTR 0,21% · Cost/view 0,063 € Cost/view +24% vs benchmark

Click a video to open it · comments read and classified

Analysis · benchmark engine

Parameters

Client budget 96.000
Agency margin18% 0%60%
Statistical preset CautiousBalancedAggressive

214 campaigns included · 26 excluded (outliers and spend below threshold)

KPICleaned averageWith marginBudget minimum
CPM 7,20 € 8,50 € 6,90 €
CPC 0,38 € 0,45 € 0,41 €
CTR 1,18% 1,04% 1,12%
Cost/view 0,024 € 0,028 € 0,026 €

Cleaned average → increased by the margin → minimum result that can be promised for the budget.

BestBackstage collezione autunno Close
Views4,2 M CTR0,81% Cost/view0,024 €
Comments read and classified · 1.284 Size requests42% Price questions31% Positive comments27%

The hook works in the first three seconds: 42% of comments ask about sizing, not price.

02 · Platform for agencies

On top of that data I built the interface that makes it usable: an overview of all clients, individual client pages with spend against budget and KPIs compared with an internal benchmark, plus best and worst videos with comments read and classified.

It is not a prettier report. It is where you look before deciding what to stop, rebuild or let run.

Try the platform →
System 03 · leads Attribution live

From uploaded file to attributed lead, without manual steps.

Incoming assets
Drop client assets here
JPG shoes_shopfront_final.jpg 007.jpg
MOV teacher_lesson_b.mov 009.mov
PNG october-open-day.png 010.png
Renamed and archived
Website leads
Elena R.Instagram · Hand engraving in CRMnew
Giulia M.Instagram · Collection backstage€ 34 cost
Marco T.Google · search "evening course"€ 41 cost
Sara D.Instagram · October open day€ 29 cost
Cost per lead
Last 10 days€ 31 average
From click to enrolment
Paid visits18.420
Form started2.140
Qualified lead486
Enrolled128
Menu

Attribution

Inbox
Archive
CRM
Dashboard
Ads
Analysis
Master Digital · 06:00

Inbox · incoming creatives

watcher attivo

Trascina qui immagini e video

MP4 reel_testimonianza_giulia.mp4 007.mp4
JPG statica_programma_v2.jpg 008.jpg
MOV docente_lezione1_taglio_b.mov 009.mov
PNG open_day_october_final.png 010.png
MP4 WhatsApp Video 2026-09-11.mp4 011.mp4
JPG IMG_4471 copy 2.jpg 012.jpg

The original filename is discarded: only the number remains. The description lives in the registry.

Automazione

06:04:02 watcher · 6 new files

06:04:03 tipo · 3 video, 3 immagini

06:04:04 durata e formato letti

06:04:05 numeri assegnati · da 007 a 012

06:04:06 renamed · number and extension only

06:04:07 spostati in /Active/Master-Digital

06:04:08 registro · 6 rows aggiunte

06:04:09 campaign · MD · Lead · Sett

06:04:10 adset associati · 4

06:04:11 campaigns created · platform Ad IDs saved

06:04:12 anteprime create · 6

06:04:13 notification sent to team

Pronti al lancio

Creatives

Inbox0
Active24
Retargeting9
Past63
Awaiting approval3

Regole cartella

ID progressivo alla creazione Spostamento in base allo stato Mandatory registry row

A creative never lives in two places: its folder shows its status.

/Active · Master Digital

004004.mp4 · reel giuliaprospecting
005005.jpg · carosello moduliprospecting
006006.jpg · statica sbocchiLookalike (2%)
007007.mp4 · reel testimonianzaLookalike (2%)
008008.jpg · statica programmainterests
009009.mov · docente lezione 1interests
010010.png · open day ottobreprospecting
011011.mp4 · intervista alumniinterests
012012.jpg · aula, dettaglioLookalike (2%)
013013.mp4 · video alumniprospecting
014014.mp4 · giornata tipoLookalike (2%)
015015.jpg · statica scadenzaretargeting

12 more creatives · sorted by number

Register · row 007

00700:34 Testimonial Reel caricata 12 set · 06:04 /Active/Master-Digital
ID007 · reel testimonianza
Ad ID120214887301442
CampaignMD · Lead Gen · Set
Ad setlookalike 2% · 25-44
Launch12 set · attiva
Format9:16 · 00:34
UTM generata ?utm_source=meta&utm_campaign=md_lead_sett&utm_term=lal2_2544&utm_content={​{ad.id}}

The link carries the Ad ID assigned by the platform. The registry resolves it back to the creative and its ad set.

CRM · incoming lead

form inviato · UTM letta
Name Email Course Ad Ad set Status
Elena Vitali e.vitali@mail.it Digital Master 007 Lookalike (2%) new
Marco Tinellim.tinelli@mail.itDigital Master004prospectingappointment booked
Sara Bendinellisara.b@mail.itDigital Master009interestscontacted
Luca Ravasil.ravasi@mail.itDigital Master004prospectingcontract
Chiara Montichiara.monti@mail.itDigital Master006Lookalike (2%)contacted
Davide Sorrentid.sorrenti@mail.itDigital Master009interestsappointment booked
Anna Peronianna.peroni@mail.itDigital Master004prospectingappointment booked
Paolo Nicosiap.nicosia@mail.itDigital Master007Lookalike (2%)contacted
Giulia Ferrarog.ferraro@mail.itDigital Master007Lookalike (2%)contract
Stefano Albertis.alberti@mail.itDigital Master006interestslost

Nobody types the source: it arrives from the link with the lead.

412 leads · 100% with Ad ID

Dashboard · updated at 06:00

Meta + Google + CRM · ultimi 12 mesi
Spend161.400 €+9%
Leads4.720+18%
CPA34,20 €−7%
Scheduled calls1.888+11%
Contracts708+14%
Revenue1.062.000 €ROAS 6,6

Monthly leads · spend

LeadsSpend
G F M A M G L A S O N D

October: creative 007 launches, and spend and leads rise together.

CPA by ad set

Lookalike (2%)27,40 €
prospecting33,10 €
interests38,90 €
retargeting19,60 €

Nobody builds this view manually: it is already there in the morning.

Ads · who came from each creative

match UTM ↔ CRM
00400:28 Spend3.180 € Contracts19 Revenue28.500 €
Giulia’s Reel
Leads112CPA28,40 €
Leads in CRM
Marco Tinelli · contratto Luca Ravasi · contratto Anna Peroni · call fissata Sofia Marchetti · contratto Emanuele Riva · contattato Beatrice Gallo · call fissata Tommaso Neri · perso Valentina Sala · contratto Riccardo Bonomi · contattato Martina Fabbri · call fissata + altri 102
00700:34 Spend3.570 € Contracts28 Revenue42.000 €
Testimonianza
Leads148CPA24,10 €
Leads in CRM
Elena Vitali · nuovo Giulia Ferraro · contratto Paolo Nicosia · contattato Alessio Trevisan · contratto Camilla Rossetti · call fissata Nicola Ferretti · contratto Serena Piazza · contattato Andrea Colombo · contratto Laura Bianchi · call fissata Matteo Guidi · contratto + altri 138
006static Spend2.640 € Contracts9 Revenue13.500 €
Sbocchi lavorativi
Leads71CPA37,20 €
Leads in CRM
Chiara Monti · contattato Stefano Alberti · perso Ilaria Costa · call fissata Fabio Lombardi · contratto Greta Sanna · contattato Diego Parisi · perso Alice Mazzoni · call fissata Simone Conti · contratto Noemi Grassi · contattato Pietro Basile · perso + altri 61

Every name in the list is a real CRM lead, attributed back to the creative that generated it.

Analysis · lead to contract

30 giorni · Master Digital
Leads412
Contacted318 · 77%
Scheduled calls164 · 40%
Contracts61 · 15%
Lead → contract11 days No show18% Call → contract37%

The percentages are not estimates: every step is a CRM status.

Revenue by creative

00728 contracts42.000 €
00419 contracts28.500 €
0069 contracts13.500 €
0133 contracts4.500 €
others2 contracts3.000 €
Contract cost231 € Revenue91.500 € Spend14.100 € ROAS6,5

03 · Ads → CRM → dashboard attribution

A creative is dropped into a folder and the system handles the rest: it assigns a number, archives it under the right status and records every launch with its campaign, ad set and platform Ad ID.

When a lead arrives, the Ad ID in the link enters the CRM. Every night, platform and CRM data are joined through that number and resolved through the registry: the morning dashboard shows not only lead cost, but which people each creative brought in and how many signed.

It matters because without this step optimisation focuses on cost per lead, which is the wrong metric: the ad with the cheapest leads is rarely the one that brings the most contracts.

Open the system →
System 04 · execution Control room 6 platforms

Changes stay traceable: you can always see who did what.

Connected platforms
Metaads · 3 account
Google Adsads · 2 account
GA4analytics
TikTokads · 1 account
LinkedInads · 1 account
CRMleads and statuses
Search Consoleorganic search
Shopifyorders
Ask for something
Pause ads above €40 per lead and move the budget to the best performers. Send
request sent · 14:07
What it did
Paused 4 overly expensive adsMeta · 3 account
Moved €2,400 to the best performersMeta and Google Ads
Logged in the change registerwith date and reason
Every change is reversible: the previous state is retained.
Rules and limits
Remembers the contexteach client's objectives, budgets and limits
Does not change the total budgetmoves it only among ads for the same client
Menu

Control Centre

Platforms · AI

Ferrini Home

Arredo · 5 mercati

00Link 01Console 02Context

Demo mockup
Fictional data.

Link / eight connected platforms
API · MCP

The Map

Meta AdsAdvertising · API
Google AdsAdvertising · API
TikTok AdsAdvertising · API
Search ConsoleTracking · API
AIA single dashboard: read and operate across all platforms from here.
GA4Tracking · MCP
SlackCanale · MCP
HubSpotCRM · MCP
Tag ManagerTracking · API

What it can do

ReadSpend and results from every platform, orders and real CRM value, and tracking status.
OperateCreate campaigns and ads; change budgets, bids, status and targeting.
Creatives & audiencesPublish from the register with UTMs already assembled; build audiences from CRM lists.
Data & exportsExtract lists, export, prepare the report and send it to the channel.

Use the API where one exists, and MCP where available.

What it knows

ClientFerrini Casa · arredo online · 5 mercati.
Budget38.000 € al mese, ripartizione decisa da me.
Economics38% margin: a contract supports up to €320.
Landing pagesNine active pages, each with its own UTM.
CreativesNumbered registry: 43 creatives, 12 active.
GuidelinesTone, banned words and promises that must not be made.

What it remembers

JunSconto 10% in prospecting: margine sotto zero. Chiuso.
JunPMax without brand exclusion was cannibalising search.
JulGermany: broad audiences do not work.
JulRetargeting beyond 14 days doubles the cost. Window fixed at 14.

Avoid actions

No changes above 30% in one step.

No creative without a number and registry row.

It prepares container versions but does not publish them.

If data is missing, it says so instead of estimating it.

You · 09:14

Prospecting works in Spain: Meta’s CPA is 25% lower than Google Ads’, but Google drives more contracts. Increase Google Ads budget by 30%.

AI · 09:14

I previously checked

Meta AdsSpain, prospecting: €18.40 CPL. The lowest 25%, confirmed.
Google Ads€24.60 CPL, but 34 contracts versus 21.
HubSpotCost per contract: Google €214, Meta €297.

Completed

Google AdsES prospecting budget +30%: €320 → €416 per day.

Receipts

campaigns1428… and 1431…: change accepted at 09:14.
SlackReceipt posted in #ferrini-ads.

Meta CPL will remain lower: that is the metric that does not matter. If Google cost per contract exceeds €260, I will flag it.

Try a command

Export last week’s data for me. Download hot leads from the CRM for 2025–2026 and create a retargeting campaign using ads 002, 004 and 005. In Spain, Meta CPL is lower but Google brings more contracts: increase the Google Ads budget by 30%.

Connected platforms

Meta AdsAPI
Google AdsAPI
TikTok AdsAPI
GA4via MCP
Tag ManagerAPI
Search ConsoleAPI
HubSpotvia MCP
Slackvia MCP

Advertising, tracking, CRM and client channel.

04 · Platforms connected to one AI

The advertising and tracking platforms, CRM and client channel are connected to the same AI: through an API where one exists, or through MCP where available.

From there, there is one control room: ask in plain language for an export, a hot-lead list turned into a retargeting campaign, or budget moved where contracts cost less. The AI says what it checked, acts across the platforms and returns a receipt.

It matters because daily management means twenty manual steps across six interfaces, and the time saved can go into decisions. The limits remain explicit: above the threshold it does not act, and it does not decide strategy. It works on one condition — the upstream data must already be clean and attributed.

Open the system →

The screens above are the real mockup in miniature: it runs by itself, and clicking opens the full experience. Names and figures are fictional; the behaviour is real.

How I work, briefly

  • observe.
  • decide.
  • document.
  • revise.

04

How I work

I don't sell certainties or secret formulas.

Advertising results depend on variables no consultant fully controls. I make decisions based on the information available, document the reasons behind my choices, and am ready to revise them when new evidence appears.

I'm not interested in defending a decision because it was mine.

I'm interested in understanding what is happening, and using what we learn to decide what to do next.

05

Experience

Over the years I've worked, directly or through agencies, with companies such as:

  • Banca Sella
  • BEACH-STREET Skincare
  • Bellissima
  • Chilly
  • Clinica Baviera
  • Coop Alleanza 3.0
  • Cosmoprof
  • Digicamp
  • DoDo
  • Dogfy Diet
  • eCampus
  • Elisabet
  • EOLO
  • epay
  • Eridania
  • EROSKI
  • EXKi
  • Feltrinelli
  • Harmont & Blaine
  • Istituto Marangoni
  • Istituto Volta
  • Korff
  • Lab Series
  • LongLife
  • Makecampus
  • Manolo Bakes
  • Mediolanum
  • Mercato Urbano
  • Navicanarias
  • Nomination
  • Prima Assicurazioni
  • Ruralis
  • Salone del Mobile.Milano
  • Securitas
  • Skipper Zuegg
  • Slash School
  • Sodalis Group / BioNike
  • StarBottle
  • Terna
  • Terranova
  • The Only Fresh
  • TicketOne
  • Treccani
  • Unimarconi
  • Vibram
  • Webuild
  • Yamamoto Nutrition
  • YOLO

and with many other brands and organisations.

I've managed and analysed millions of euros in advertising spend, working on campaigns, strategy, measurement, analysis and marketing systems.

Experience helps to recognise some problems faster.

It doesn't make the next project predictable.

Working together

I take on a limited number of ongoing collaborations, and a few specific projects I find interesting and where I think I can genuinely be useful.

I don't sell a standard package.

On some projects I run advertising directly. On others I work alongside whoever is already handling it. On others still I work on measurement, analysis, automation, or building one specific system.

Often these activities coexist within the same project.

Activities, responsibilities and ways of working are defined together at the start.

If I think my involvement would add little to what you already have, I'd rather say so.

06

Let's talk

If you think it might make sense to work together, tell me briefly about the context.

Tell me the company, what you're trying to do, what already exists, the kind of support you're looking for and the timing.

I read every request personally.

If I see a possible fit where I could make a concrete contribution, I'll suggest a short introductory conversation.

Contact request

{{ hint }}

Received.

I read every request personally. I'll reply as soon as I can.

Stefano Rossi / LampoDigital

Advertising · Measurement · Analysis · Automation

Tell me about the project