Jan Berning

GTM Engineer

A portfolio of go-to-market playbooks.
Playbook Portfolio janberning15@dhlbox.de   ·   linkedin.com/in/jan-berning

About

I build the systems a go-to-market team runs on, from outbound and enrichment to scoring, content, and revenue analytics, and increasingly I build and run them end to end from Claude Code. For two years I was Head of Growth at Databar, where I built much of what you see here, plus selected freelance projects like Roopairs.
Cases
01Intent-based outbound from Claude Code10.76% reply rate, high five-figure pipelineOutbound
02Hyper-targeted ICP definition from Claude Codea data-backed ICP and buying signals, built in hoursICP & Data
03Account scoring at scale4,000 accounts scored into HubSpotICP Scoring
04Always-on CRM hygiene and write-back~2,000 companies fixed, CRM stays clean on its ownCRM enrichment
05Local lead-gen where LinkedIn failsowner contacts in a segment LinkedIn cannot reachOutbound
06Case-study-mention outbound at scalea researched opener for every company, 5 to 15k scaleOutbound
07Blog content at scale on first-party dataunique content built for SEO and AI searchContent
08Revenue analytics and attribution dashboardone model for what drives revenueAnalytics
09Evergreen signal campaignsthree always-on signal campaigns, no list to rebuildOutbound
10Build Roopairs' entire addressable market19K-record CRM rebuilt into a full, ICP-segmented marketTAM building
Jan Berning · GTM EngineerPlaybook Portfolio

Tools & use cases

Every tool I worked with, and the cases where it shows up. Tool proficiency at a glance.

Enrichment & scraping

Databar01 · 02 · 03 · 04 · 05 · 06 · 09 · 10
Apify01 · 06 · 09 · 10
CrustData02 · 03
Owler02 · 03
BuiltWith02 · 03
Diffbot03
PredictLeads03
Outscraper05
Rapid API10
Exa.ai10
Parallel.ai10
LinkedIn09
Indeed09
ZeroBounce01 · 09
ContactOut05 · 06
RocketReach05
LeadMagic05 · 06
Findymail05
Hunter.io05
Million Verifier10

Agentic & orchestration

Claude Code01 · 02 · 04 · 07 · 08 · 09 · 10
OpenAI04 · 10
Python04 · 07
n8nstack

CRM & calls

HubSpot02 · 03 · 04
Salesforce04
Attio02 · 07 · 10
Fireflies07

Outreach

Smartlead01 · 06 · 09
Instantlystack
HeyReachstack

Analytics & ads

Mixpanel02 · 08
Google (GA4 · GSC · Ads)07 · 08
Meta Ads08
PayPal08
Brevo08

SEO & content

DataForSEO07
SpyFu07
Framer07
Jan Berning · GTM EngineerTools & Use Cases
Case 01Outbound · Claude Code

Intent-based outbound from Claude Code, over 10% reply rate

Designed and built

We launched Databar's MCP, SDK, and API (a data layer you call from the terminal). I was responsible for the cold email campaign and the distribution behind the launch. My hypothesis: the people already using Claude Code for go-to-market are the ones who would want to call 100+ data providers from inside it.

Problem

Cold outbound mostly gets ignored. Databar's ICP is RevOps and GTM operators, and the sharpest slice for this launch was the ones already running go-to-market in Claude Code. I had to reach exactly those people, and say something relevant enough that a busy operator bothers to reply.

Approach

I started from intent. People who comment on Claude-Code-for-GTM posts have already raised their hand. So I scraped them, qualified them hard against our ICP, and only reached out to the ones who genuinely fit, with a message that sounded like a person wrote it.

The build, every step from Claude Code
  1. Scrape the engagers (likers, commenters) on posts about Claude Code for go-to-market, using Apify and Databar.
  2. Enrich the company and the person first, just enough to qualify them. No email yet.
  3. Qualify against our ICP from Claude Code (role, company type, size), with a partner and competitor exclusion list.
  4. Only for the people who pass, run the Databar waterfall across 10+ email providers to find a work email.
  5. Verify deliverability with ZeroBounce.
  6. Write a human opener that picks up on the prospect's own Claude Code interest and pitches the SDK and MCP as "Clay that lives in the terminal."
  7. Push the qualified, verified list into Smartlead and run a 3-sequence campaign.
Scrape
Qualify · ICP
Email waterfall
Verify
Send
Results
Proof
Smartlead campaign: 6,875 sent, 76% open, 10.76% reply Public LinkedIn endorsement of the campaign
Jan Berning · GTM EngineerCase 01
Case 02ICP & Data · Claude Code

Hyper-targeted ICP definition from Claude Code

Designed and built

Delivered for Databar and for several agencies and B2B customers.

Problem

Most teams define their ICP from intuition rather than evidence. Without a data-backed view of which customers convert and retain, and why, segmentation and targeting stay imprecise.

Approach

I built the ICP on a solid data foundation. The foundation is the data pulled in the build below: closed-won and churned accounts, product usage, call transcripts, and firmographic and timing signals. On top of it, Claude Code runs the analyses that surface the patterns, and those define the segments, the buying criteria, and the right moment to engage.

The build, from Claude Code, data via APIs
  1. Pull closed-won deals, active customers, and churned accounts from the CRM (e.g. HubSpot).
  2. Pull product usage from Mixpanel: power users, feature adoption, and where accounts activate or stall. This profiles a high-retention account and flags accounts ready to expand.
  3. Pull call transcripts for buyer language and objections in their own words.
  4. Enrich firmographics through Databar (industry, size, funding via CrustData and Owler, tech stack via BuiltWith, geography), and add buying-timing signals such as open job postings and new hires. A company hiring a RevOps lead, for example, signals near-term need for a tool like Databar.
  5. Let Claude Code run the analyses across that data: a closed-won analysis for the traits the best customers share, a win/loss and churn analysis for what separates them from the accounts that left, and a feature-adoption analysis for the usage that predicts fit and expansion. The output is explicit buying criteria (for example, only teams of 15+ buy), the signals that mark the right moment to engage, and the timing for expansion.
Pull data
Enrich
Analyze · ICP
Results
Jan Berning · GTM EngineerCase 02
Case 03ICP Scoring

Account scoring at scale

Designed and built

A workflow I run for customers fairly often. This one was a B2B SaaS selling into manufacturing in North America.

Problem

The sales team had thousands of accounts and no reliable way to rank them. The signals that predict fit were missing or wrong across providers, and a wrong value is worse than a blank one.

Approach

I scored on a handful of high-value criteria, not everything, and kept fit separate from momentum. The hard part is the signals nobody publishes. For the data points that are rarely stated outright, I triangulated each one from several sources, including the tech stack, open job postings, and AI web research, and kept the source on every value. Across most fields I leaned on the AI researcher agent more than on any single provider, because it returns "none available" rather than a wrong value.

The build
  1. Load 4,000 accounts into a Databar table.
  2. Headcount growth from CrustData, Owler, and Diffbot, split into 6-month and 1-year windows.
  3. Manufacturing sites from Diffbot plus the AI researcher, which returns the count and a source.
  4. ERP detection from BuiltWith tech stack, open job postings (PredictLeads), and AI research, each with its source.
  5. Manufacturing model (engineer-to-order vs make-to-order) inferred from job posts, and company news from PredictLeads and Owler filtered by AI for new facilities, supply chain, ERP changes, and M&A. Several more providers went in per field, with the AI researcher doing a lot of the heavy lifting wherever no single provider was reliable.
  6. Every signal is stored as value plus detail plus source. A final scoring prompt outputs a fit label and a momentum score, written into HubSpot lead scoring. I validated on 50 accounts, then narrowed to three core signals to cut credits before the full run.
Load
Signals
Score
HubSpot
Results
Jan Berning · GTM EngineerCase 03
Case 04CRM enrichment

Always-on CRM hygiene and write-back

Designed, built with the GTM team

A mobile ad-tech company running HubSpot, synced into Salesforce.

Problem

About 2,000 companies had no lead type. Plenty were missing country, domain, or vertical, and some URLs were just wrong (an account named Amazon pointing at linkedin.com). The bad formatting also kept breaking the HubSpot to Salesforce sync.

Approach

Run it continuously, touch only what is empty or wrong, and keep the formatting strict so the sync holds. Where a field needs judgment, use the records that are already correct as examples.

The build, two scheduled Databar workflows, one for companies, one for contacts
  1. Pull companies and contacts from HubSpot through the native integration.
  2. Run each enrichment only when the field is empty, so good data never gets re-spent on.
  3. Fill HQ and contact location from LinkedIn-sourced provider data, formatted strictly ("United States" not "US", full state names) so the sync does not choke.
  4. Fill the missing domain, website, and LinkedIn URL.
  5. Fix wrong URLs with a custom AI prompt, fed examples of good and bad.
  6. Classify lead type and vertical with an AI prompt mapped to the existing HubSpot pick-list values, using already-correct accounts as examples.
  7. Write back on a schedule so the Salesforce sync stays clean.
Pull
Enrich · fix · classify
Write-back
Results
Jan Berning · GTM EngineerCase 04
Case 05Outbound

Local lead-gen where LinkedIn fails

Designed and built

A US home-services and local-business lead-gen operator.

Problem

For local home-services businesses, LinkedIn and Apollo data is thin to useless. The owners simply are not on LinkedIn. The operator needed owner names and phone numbers by city, at volume.

Approach

Go where the data lives. For this segment that means Google Maps, niche local directories, and the BBB, not LinkedIn. Finding the right person at a local business is harder than at a company with a LinkedIn page, so the contact step leans on web research and verification.

The build
  1. Start with a master search table. Give it a location and a query (for example "Home Cleaning, Los Angeles"). A Google Maps parser (Outscraper) returns every matching business with its phone, rating, address, and website.
  2. Pull in niche local directories and BBB listings for the same area, so coverage is not limited to what Maps returns.
  3. Send each business to a companies table and run a qualifier that splits franchises (one corporate office behind many locations) from independent solo-owner shops. The owner lookup is completely different for each.
  4. For the solo owners, an AI researcher runs a live web search for the owner's name, phone, and email. It gets the full address as input, so it matches the right location and not a same-named business in another city.
  5. A phone verifier checks the number and cross-checks the owner against their BBB profile, the most reliable source in this segment.
  6. Run 10+ contact providers in parallel (ContactOut, RocketReach, LeadMagic, Findymail, Hunter.io, and more) and merge their results into one owner contact per business, recording which provider supplied it.
Maps · directories
Qualify · research
Contacts
Results
Jan Berning · GTM EngineerCase 05
Case 06Outbound

Case-study-mention outbound at scale

Scoped and advised

A lead-gen agency running cold email across client verticals, where the first line decides whether the email gets read.

Problem

Generic outbound was not landing. The opener that did work was "I saw you worked with company A", but pulling a relevant case study per target by hand does not scale past a few dozen.

Approach

Referencing a real client of theirs proves you did the homework, and that is what lifts replies. The work is doing that research automatically for every company on a five-figure list, not just the first few. So I pick the right companies, then automate the one thing that makes the opener land: a relevant case study per target, run across the whole list.

The build
  1. Scrape a company list from Clutch and other directories (Apify) into a Databar table, 5,000 to 15,000 rows.
  2. For each company, run the Databar AI research agent to find a notable client they have worked with and summarize it for the opener.
  3. Waterfall-enrich a verified email and phone across several providers.
  4. Generate the personalized opener that references the case study.
  5. Export to Smartlead and send.
Scrape
Case-study research
Enrich
Send
Results
Jan Berning · GTM EngineerCase 06
Case 07Content · Claude Code

Blog content at scale on first-party data

Designed and built

Databar's own blog. A content play I built on Databar.

Problem

Generic AI articles read like everyone else's, so they do not rank and they do not get cited. I wanted articles no competitor could write, that both Google and the LLMs want to surface.

Approach

Feed the writer data nobody else has. Combine our own performance data, real external keyword demand, and the language our customers use, so every article is specific and hard to copy.

The build, pipeline from Claude Code
  1. Pull internal performance data via the Google Search Console and Google Analytics APIs (top queries, rankings, CTR gaps, page performance).
  2. Pull external keyword KPIs via the DataForSEO and SpyFu APIs through Databar (search volume, SERP, related keywords, People Also Ask).
  3. Pull proprietary signal from our CRM and call-recording tool (Attio): anonymized customer pain points and phrasing that only we have.
  4. Run web research alongside it, then write articles grounded in those specific points.
  5. Validate with a Python quality gate (structure, data tables, banned phrases, keyword placement), then publish to Framer CMS with relevant internal links to existing articles and CTAs added automatically.
Performance
Keywords
CRM signal
Write · validate
Publish
Results
Jan Berning · GTM EngineerCase 07
Case 08Analytics · Claude Code

Revenue analytics and attribution dashboard

Designed and built

A direct-to-consumer subscription business.

Problem

Marketing, product, payments, and pipeline data each lived in its own tool. Nobody could say which activities drove revenue, or forecast what was coming.

Approach

Pull every touchpoint into one model, connect spend to revenue, and show only the numbers that change a decision. Built and run from Claude Code.

The build, Claude Code pulling each source via API, then building the dashboards
  1. Ads: the Meta Marketing API (Ads Insights) and Google Ads for spend, impressions, clicks, and conversions across paid social and search.
  2. Product: Mixpanel for funnel events, activation, and retention.
  3. Revenue: PayPal for transactions, subscriptions, and refunds.
  4. Email: Brevo, the newsletter tool, for sends, opens, clicks, and conversions.
  5. Traffic and source: web analytics with UTM tracking (GA4). Pipeline: CRM data.
  6. Source tracking: tag each signup with its first-touch source from the UTM, so you can see where customers come from.
  7. Metrics: spend, blended CAC and ROAS, LTV, MRR, and churn.
  8. Forecasting: a simple revenue forecast, and how marketing spend tracks against revenue over time.
Ads
Product
Revenue
Email
Model
Results
Jan Berning · GTM EngineerCase 08
Case 09Outbound · Claude Code

Evergreen signal campaigns

Designed, run with the team

Three always-on outbound campaigns I built at Databar, each tied to a buying signal.

Problem

A one-off blast goes stale the moment you hit send, and someone has to keep rebuilding the list. The outbound that compounds is tied to a signal that keeps producing fresh, in-market accounts on its own.

Approach

Build evergreen campaigns, one per high-intent signal, that pull in new accounts every week as the signal fires. I built three: companies hiring for relevant roles, companies that recently raised funding, and companies with specific, relevant news. Each one is set up once and then runs on its own.

The build, the hiring-signal campaign, from Claude Code
  1. Continuously scrape open job postings from LinkedIn and Indeed (via Apify) for the roles that signal need: a first RevOps or GTM-engineer hire, 3+ open SDR/BDR roles, or a content or SEO manager opening.
  2. Qualify the company against ICP, and drop staffing firms, competitors, and existing customers.
  3. Find the right person (the hiring manager, the function owner, the founder) via Databar.
  4. Waterfall-enrich a verified email and phone, then verify with ZeroBounce.
  5. Write the opener straight off the trigger ("saw you're hiring your first RevOps lead").
  6. Push to the sending tool. New postings show up daily, so fresh in-market accounts flow into the campaign without anyone rebuilding the list.
Job scrape
Qualify
Find person
Verify
Send
The other two run the same way

One watches for recent funding rounds, where there is new budget and an active buying mindset. One watches for specific company news, like an expansion or a launch, the kind of event that creates a reason to reach out. Same shape every time: a trigger source that feeds fresh leads, enrichment and verification, then a message written off the signal.

Results
Jan Berning · GTM EngineerCase 09
Case 10TAM building · freelance

Build Roopairs' entire addressable market from scratch

Designed and built, freelance

Roopairs, a US platform for commercial-kitchen equipment repair. They had a strong outbound motion already, a 9-channel signal-based sender on top of Attio. The problem was the data underneath it.

Problem

The outbound side was in good shape. The ~19,000 companies already in Attio were not. There was no employee-count field, so none of their five headcount-based ICPs could be assigned. Only about 18% had a website, 7% a location, 69% had no contact at all, and only 27% of contacts had a phone, even though three of the nine channels are phone-based. A large share of the list was residential HVAC rather than commercial-kitchen, so it sat outside the ICP entirely.

Approach

Rather than tidy a messy list, I built the whole market: one canonical database of every US commercial-kitchen repair company, segmented by ICP from day one, on modern AI-era data sources. The existing 19K folds in as one input, so their customers and anyone they had already spoken to stay out of cold outreach. First focus: the Small (4-12) and Medium (13-24) shops, which convert best.

The build, orchestrated from Claude Code
  1. Pull the full company universe from maps and directories (Apify and the Apify MCP, Rapid API, Blitz API).
  2. Crawl each website with an HTML-to-text step and process it with GPT-5 Nano via the Batch API to pull signals: current software and portals, hiring, tooling.
  3. Use AI web research (Exa.ai, Parallel.ai) for the harder signals.
  4. Add only the fields that earn their place: employee count (assigns the ICP), an ICP segment tag, website and location, the right decision-makers per segment (owner, office manager, ops or service manager), CFESA membership as a fit signal, current software and portals as the outreach angle, and hiring or growth signals for timing.
  5. Get verified work emails and mobiles with Databar, and validate every address with Million Verifier so the contact data is clean.
  6. Push the clean, ICP-segmented database into Attio, ready for the team to work, and easy to refresh on a schedule so it stays current.
Universe
Crawl · GPT
AI research
Contacts
Push
Results
Jan Berning · GTM EngineerCase 10

There is a lot more where this came from

This portfolio is a selection. I built a large library of ready-to-run playbook tables on Databar. If a play here is interesting, that is the place to go deeper.

janberning15@dhlbox.de   ·   linkedin.com/in/jan-berning