Careers

Our clients take the podium. We build the car

TripleDart builds the growth machine for 250+ tech companies worldwide: paid media, SEO, content, and GTM engineering, all tuned for one number. Pipeline.

$300M+

in annual ad spend on the track

24/7

the garage never
closes

300+

cars on our grid, and counting

1

number on the
dashboard: pipeline

Why TripleDart

In-House, you build one car. here, you build the whole grid.

 Your craft grows at the speed of the problems you see. And we see more of them, faster, than anywhere else.

In-house

One product, one audience, one playbook. When it works, you run the same laps again next quarter.

One growth stage. You learn what works at your company's size, and only find out about the next stage when you get there.

One experiment budget. Big swings need sign-off, and a failed test can haunt a roadmap for months.

Pattern recognition builds one data point at a time.

TripleDart

300+ machines, different markets, different speeds. What you learn on one car makes every other car faster the same week.

Every growth stage at once. You watch what breaks at $10M and what scales at $100M.

Hundreds of live experiments running across the grid at any moment. A test fails? You already know because another crew ran it first.

Pattern recognition compounds. A hundred race weekends a year instead of one.

How We Race

Six rules from our garage.

How we make calls when the pressure's on and the clock is running.

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none">

<g filter="url(#filter0_n_5471_21523)">

<path d="M13.5714 13.3301C15.7064 12.0951 17.1429 9.78673 17.1429 7.14286C17.1429 3.19797 13.9449 0 10 0C6.05511 0 2.85714 3.19797 2.85714 7.14286C2.85714 9.78673 4.29357 12.0951 6.42857 13.3301V15C6.42857 15.789 7.06817 16.4286 7.85714 16.4286H12.1429C12.9318 16.4286 13.5714 15.789 13.5714 15V13.3301ZM6.42857 18.9286C6.42857 18.3369 6.90827 17.8571 7.5 17.8571H12.5C13.0917 17.8571 13.5714 18.3369 13.5714 18.9286C13.5714 19.5203 13.0917 20 12.5 20H7.5C6.90827 20 6.42857 19.5203 6.42857 18.9286Z" fill-rule="evenodd" clip-rule="evenodd" fill="#3C3C3C"/>

</g>

<defs>

<filter id="filter0_n_5471_21523" x="2.85714" y="0" width="14.2857" height="20" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">

<feFlood flood-opacity="0" result="BackgroundImageFix"/>

<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>

<feTurbulence type="fractalNoise" baseFrequency="1.6666666269302368 1.6666666269302368" stitchTiles="stitch" numOctaves="3" result="noise" seed="7117"/>

<feColorMatrix in="noise" type="luminanceToAlpha" result="alphaNoise"/>

<feComponentTransfer in="alphaNoise" result="coloredNoise1">

<feFuncA type="discrete" tableValues="1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "/>

</feComponentTransfer>

<feComposite operator="in" in2="shape" in="coloredNoise1" result="noise1Clipped"/>

<feFlood flood-color="rgba(0, 0, 0, 0.25)" result="color1Flood"/>

<feComposite operator="in" in2="noise1Clipped" in="color1Flood" result="color1"/>

<feMerge result="effect1_noise_5471_21523">

<feMergeNode in="shape"/>

<feMergeNode in="color1"/>

</feMerge>

</filter>

</defs>

</svg>

‍

The stopwatch doesn't lie

Every campaign, experiment, and piece of content gets judged by one thing: did it move pipeline? If not, we cut it and move on.

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none">

<g clip-path="url(#clip0_5471_21532)">

<g filter="url(#filter0_n_5471_21532)">

<path d="M12.1429 0H2.14286C0.95939 0 0 0.95939 0 2.14286V12.1429C0 13.3263 0.95939 14.2857 2.14286 14.2857H3.93143V7.67163C3.93143 5.60056 5.61036 3.92163 7.68143 3.92163H14.2857V2.14286C14.2857 0.95939 13.3263 0 12.1429 0ZM14.2857 5.70734V5.71429H14.305V12.3312C14.305 13.4161 13.4255 14.2956 12.3407 14.2956H5.71714V7.67163C5.71714 6.58679 6.59657 5.70734 7.68143 5.70734H14.2857ZM16.0907 5.71429H17.8571C19.0406 5.71429 20 6.67367 20 7.85714V17.8571C20 19.0406 19.0406 20 17.8571 20H7.85714C6.67367 20 5.71429 19.0406 5.71429 17.8571V16.0813H12.3407C14.4117 16.0813 16.0907 14.4023 16.0907 12.3312V5.71429Z" fill-rule="evenodd" clip-rule="evenodd" fill="#3C3C3C"/>

</g>

</g>

<defs>

<filter id="filter0_n_5471_21532" x="0" y="0" width="20" height="20" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">

<feFlood flood-opacity="0" result="BackgroundImageFix"/>

<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>

<feTurbulence type="fractalNoise" baseFrequency="1.6666666269302368 1.6666666269302368" stitchTiles="stitch" numOctaves="3" result="noise" seed="7117"/>

<feColorMatrix in="noise" type="luminanceToAlpha" result="alphaNoise"/>

<feComponentTransfer in="alphaNoise" result="coloredNoise1">

<feFuncA type="discrete" tableValues="1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "/>

</feComponentTransfer>

<feComposite operator="in" in2="shape" in="coloredNoise1" result="noise1Clipped"/>

<feFlood flood-color="rgba(0, 0, 0, 0.25)" result="color1Flood"/>

<feComposite operator="in" in2="noise1Clipped" in="color1Flood" result="color1"/>

<feMerge result="effect1_noise_5471_21532">

<feMergeNode in="shape"/>

<feMergeNode in="color1"/>

</feMerge>

</filter>

<clipPath id="clip0_5471_21532">

<rect width="20" height="20" fill="white"/>

</clipPath>

</defs>

</svg>

‍

Smooth is fast

Panic looks busy but loses races. We move with urgency and judgment; clean execution beats heroics every time.

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none">

<g clip-path="url(#clip0_5471_21541)">

<g filter="url(#filter0_n_5471_21541)">

<path d="M9.28572 2.14286C5.34083 2.14286 2.14286 5.34083 2.14286 9.28571C2.14286 13.2306 5.34083 16.4286 9.28572 16.4286C13.2306 16.4286 16.4286 13.2306 16.4286 9.28571C16.4286 5.34083 13.2306 2.14286 9.28572 2.14286ZM0 9.28571C0 4.15736 4.15736 0 9.28572 0C14.4141 0 18.5714 4.15736 18.5714 9.28571C18.5714 11.3344 17.908 13.2282 16.7841 14.7639L19.5819 17.5616C20.1399 18.1194 20.1399 19.024 19.5819 19.5819C19.024 20.1397 18.1196 20.1397 17.5616 19.5819L14.7639 16.7841C13.2282 17.908 11.3344 18.5714 9.28572 18.5714C4.15736 18.5714 0 14.4141 0 9.28571ZM8.19873 5.52787C8.45619 4.3518 10.1308 4.34447 10.3985 5.51826L10.4108 5.57244C10.4191 5.60923 10.4268 5.64306 10.4351 5.67841C10.7326 6.94576 11.7583 7.91414 13.0422 8.1375C14.2693 8.35099 14.2693 10.1126 13.0422 10.3261C11.7514 10.5507 10.7217 11.5282 10.4304 12.8055L10.3985 12.9454C10.1308 14.1191 8.45619 14.1118 8.19873 12.9357L8.17247 12.8157C7.89184 11.5338 6.86354 10.5491 5.57067 10.3241C4.34574 10.111 4.34573 8.35258 5.57067 8.13949C6.85904 7.91534 7.88469 6.93664 8.1695 5.66126L8.18884 5.5732L8.19873 5.52787Z" fill-rule="evenodd" clip-rule="evenodd" fill="#3C3C3C"/>

</g>

</g>

<defs>

<filter id="filter0_n_5471_21541" x="0" y="0" width="20.0004" height="20.0002" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">

<feFlood flood-opacity="0" result="BackgroundImageFix"/>

<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>

<feTurbulence type="fractalNoise" baseFrequency="1.6666666269302368 1.6666666269302368" stitchTiles="stitch" numOctaves="3" result="noise" seed="7117"/>

<feColorMatrix in="noise" type="luminanceToAlpha" result="alphaNoise"/>

<feComponentTransfer in="alphaNoise" result="coloredNoise1">

<feFuncA type="discrete" tableValues="1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "/>

</feComponentTransfer>

<feComposite operator="in" in2="shape" in="coloredNoise1" result="noise1Clipped"/>

<feFlood flood-color="rgba(0, 0, 0, 0.25)" result="color1Flood"/>

<feComposite operator="in" in2="noise1Clipped" in="color1Flood" result="color1"/>

<feMerge result="effect1_noise_5471_21541">

<feMergeNode in="shape"/>

<feMergeNode in="color1"/>

</feMerge>

</filter>

<clipPath id="clip0_5471_21541">

<rect width="20" height="20" fill="white"/>

</clipPath>

</defs>

</svg>

‍

No team orders

Nobody wins here by seniority. The best argument gets the green light, whether it comes from a founder or someone in week two. Titles are for email signatures.

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none">

<g filter="url(#filter0_n_5471_21523)">

<path d="M13.5714 13.3301C15.7064 12.0951 17.1429 9.78673 17.1429 7.14286C17.1429 3.19797 13.9449 0 10 0C6.05511 0 2.85714 3.19797 2.85714 7.14286C2.85714 9.78673 4.29357 12.0951 6.42857 13.3301V15C6.42857 15.789 7.06817 16.4286 7.85714 16.4286H12.1429C12.9318 16.4286 13.5714 15.789 13.5714 15V13.3301ZM6.42857 18.9286C6.42857 18.3369 6.90827 17.8571 7.5 17.8571H12.5C13.0917 17.8571 13.5714 18.3369 13.5714 18.9286C13.5714 19.5203 13.0917 20 12.5 20H7.5C6.90827 20 6.42857 19.5203 6.42857 18.9286Z" fill-rule="evenodd" clip-rule="evenodd" fill="#3C3C3C"/>

</g>

<defs>

<filter id="filter0_n_5471_21523" x="2.85714" y="0" width="14.2857" height="20" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">

<feFlood flood-opacity="0" result="BackgroundImageFix"/>

<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>

<feTurbulence type="fractalNoise" baseFrequency="1.6666666269302368 1.6666666269302368" stitchTiles="stitch" numOctaves="3" result="noise" seed="7117"/>

<feColorMatrix in="noise" type="luminanceToAlpha" result="alphaNoise"/>

<feComponentTransfer in="alphaNoise" result="coloredNoise1">

<feFuncA type="discrete" tableValues="1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "/>

</feComponentTransfer>

<feComposite operator="in" in2="shape" in="coloredNoise1" result="noise1Clipped"/>

<feFlood flood-color="rgba(0, 0, 0, 0.25)" result="color1Flood"/>

<feComposite operator="in" in2="noise1Clipped" in="color1Flood" result="color1"/>

<feMerge result="effect1_noise_5471_21523">

<feMergeNode in="shape"/>

<feMergeNode in="color1"/>

</feMerge>

</filter>

</defs>

</svg>

‍

‍

Data decides when to pit

When the numbers say change course, we change course mid-race. No ego, no sunk-cost speeches, no waiting for next quarter's review.

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none">

<g clip-path="url(#clip0_5471_21532)">

<g filter="url(#filter0_n_5471_21532)">

<path d="M12.1429 0H2.14286C0.95939 0 0 0.95939 0 2.14286V12.1429C0 13.3263 0.95939 14.2857 2.14286 14.2857H3.93143V7.67163C3.93143 5.60056 5.61036 3.92163 7.68143 3.92163H14.2857V2.14286C14.2857 0.95939 13.3263 0 12.1429 0ZM14.2857 5.70734V5.71429H14.305V12.3312C14.305 13.4161 13.4255 14.2956 12.3407 14.2956H5.71714V7.67163C5.71714 6.58679 6.59657 5.70734 7.68143 5.70734H14.2857ZM16.0907 5.71429H17.8571C19.0406 5.71429 20 6.67367 20 7.85714V17.8571C20 19.0406 19.0406 20 17.8571 20H7.85714C6.67367 20 5.71429 19.0406 5.71429 17.8571V16.0813H12.3407C14.4117 16.0813 16.0907 14.4023 16.0907 12.3312V5.71429Z" fill-rule="evenodd" clip-rule="evenodd" fill="#3C3C3C"/>

</g>

</g>

<defs>

<filter id="filter0_n_5471_21532" x="0" y="0" width="20" height="20" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">

<feFlood flood-opacity="0" result="BackgroundImageFix"/>

<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>

<feTurbulence type="fractalNoise" baseFrequency="1.6666666269302368 1.6666666269302368" stitchTiles="stitch" numOctaves="3" result="noise" seed="7117"/>

<feColorMatrix in="noise" type="luminanceToAlpha" result="alphaNoise"/>

<feComponentTransfer in="alphaNoise" result="coloredNoise1">

<feFuncA type="discrete" tableValues="1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "/>

</feComponentTransfer>

<feComposite operator="in" in2="shape" in="coloredNoise1" result="noise1Clipped"/>

<feFlood flood-color="rgba(0, 0, 0, 0.25)" result="color1Flood"/>

<feComposite operator="in" in2="noise1Clipped" in="color1Flood" result="color1"/>

<feMerge result="effect1_noise_5471_21532">

<feMergeNode in="shape"/>

<feMergeNode in="color1"/>

</feMerge>

</filter>

<clipPath id="clip0_5471_21532">

<rect width="20" height="20" fill="white"/>

</clipPath>

</defs>

</svg>

‍

‍

Every lap compounds

We're learning machines. Every teardown gets shared, every playbook gets sharper, and small daily gains stack into craft that competitors can't catch up to.

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none">

<g clip-path="url(#clip0_5471_21541)">

<g filter="url(#filter0_n_5471_21541)">

<path d="M9.28572 2.14286C5.34083 2.14286 2.14286 5.34083 2.14286 9.28571C2.14286 13.2306 5.34083 16.4286 9.28572 16.4286C13.2306 16.4286 16.4286 13.2306 16.4286 9.28571C16.4286 5.34083 13.2306 2.14286 9.28572 2.14286ZM0 9.28571C0 4.15736 4.15736 0 9.28572 0C14.4141 0 18.5714 4.15736 18.5714 9.28571C18.5714 11.3344 17.908 13.2282 16.7841 14.7639L19.5819 17.5616C20.1399 18.1194 20.1399 19.024 19.5819 19.5819C19.024 20.1397 18.1196 20.1397 17.5616 19.5819L14.7639 16.7841C13.2282 17.908 11.3344 18.5714 9.28572 18.5714C4.15736 18.5714 0 14.4141 0 9.28571ZM8.19873 5.52787C8.45619 4.3518 10.1308 4.34447 10.3985 5.51826L10.4108 5.57244C10.4191 5.60923 10.4268 5.64306 10.4351 5.67841C10.7326 6.94576 11.7583 7.91414 13.0422 8.1375C14.2693 8.35099 14.2693 10.1126 13.0422 10.3261C11.7514 10.5507 10.7217 11.5282 10.4304 12.8055L10.3985 12.9454C10.1308 14.1191 8.45619 14.1118 8.19873 12.9357L8.17247 12.8157C7.89184 11.5338 6.86354 10.5491 5.57067 10.3241C4.34574 10.111 4.34573 8.35258 5.57067 8.13949C6.85904 7.91534 7.88469 6.93664 8.1695 5.66126L8.18884 5.5732L8.19873 5.52787Z" fill-rule="evenodd" clip-rule="evenodd" fill="#3C3C3C"/>

</g>

</g>

<defs>

<filter id="filter0_n_5471_21541" x="0" y="0" width="20.0004" height="20.0002" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">

<feFlood flood-opacity="0" result="BackgroundImageFix"/>

<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>

<feTurbulence type="fractalNoise" baseFrequency="1.6666666269302368 1.6666666269302368" stitchTiles="stitch" numOctaves="3" result="noise" seed="7117"/>

<feColorMatrix in="noise" type="luminanceToAlpha" result="alphaNoise"/>

<feComponentTransfer in="alphaNoise" result="coloredNoise1">

<feFuncA type="discrete" tableValues="1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "/>

</feComponentTransfer>

<feComposite operator="in" in2="shape" in="coloredNoise1" result="noise1Clipped"/>

<feFlood flood-color="rgba(0, 0, 0, 0.25)" result="color1Flood"/>

<feComposite operator="in" in2="noise1Clipped" in="color1Flood" result="color1"/>

<feMerge result="effect1_noise_5471_21541">

<feMergeNode in="shape"/>

<feMergeNode in="color1"/>

</feMerge>

</filter>

<clipPath id="clip0_5471_21541">

<rect width="20" height="20" fill="white"/>

</clipPath>

</defs>

</svg>

‍

‍

No passengers

See it, own it, finish it. Nobody here waits for a ticket or permission.

One team.
Every time zone.

We're operators, not order-takers. Our clients are founders and growth leaders at tech companies scaling from $10M to $100M ARR, across four continents — and they keep us close because we act like part of their team, not a vendor waiting for a brief.

The garage never closes because the team follows the sun. When one part of the world signs off, another is already on the tools. For you, that means real ownership of client outcomes and colleagues everywhere worth learning from.

And because we work across paid media, SEO, content, and GTM engineering, you'll never be boxed into one lane. The people who thrive here get curious about the whole machine — not just their part of it.

Fast teams
need good fuel.

Here's what you get beyond the payslip.
Health

full health coverage

Comprehensive medical insurance for you and your family. You focus on the campaigns, we'll handle the co-pays.

Growth

learning budget, no forms

An annual budget for courses, certifications, books, and conferences. If it sharpens your craft, it's approved.

Flexibility

work from anywhere on the map

Flexible hours across a distributed team. We measure output, not seattime — nobody's watching the clock here.

Tools

a machine that doesn't fight you

Premium tools, AI platforms, and hardware that keeps pace. Including Slate — the AI visibility platform we build in-house.

Together

team offsites & retreats

Regular offsites where we plan hard and unwind harder. The best strategy sessions happen away from desks.

Time

time off you actually take

Generous paid leave you're encouraged to use. Burnt-out marketers make bad marketing — rest is part of the job.

Open Seats

Seats open on the grid.

Pick your crew, find your fit, and hit the green arrow. A human reads every application — no resume black holes here.

No seat for your role? We'll build the car around you.

If you're exceptional at something that moves pipeline, we want to hear from you — even if the job title doesn't exist yet.