The number underneath the number
Figma reported 690,000 paid customers, up 54% year on year. Of those, 15,218 pay more than $10,000 a year and 1,525 pay more than $100,000. Net dollar retention hit 139%, and new Pro team conversions grew more than 150%.
Do the division. About 97.8% of paid customers spend less than $10,000 a year, and 0.22% spend over $100,000. A 139% NDR is a dollar-weighted average, which means it is dominated by the accounts at the top of that list. It tells you almost nothing about what is happening to the 675,000 teams at the bottom.
That is not a criticism of the metric. It is how NDR works, and every PLG company has this shape. The interesting question is what is being done for the long tail, because the economics of a sales team make the answer obvious: not much, and not because anyone is lazy.
The thesis
A customer paying $600 a year cannot justify a human touch, and that is precisely the definition of a lifecycle marketing job. At the top, expansion is a person with a relationship. In the long tail, expansion is either automated or it does not happen. With 675,000 accounts in that band and Pro conversions up 150%, the addressable upside compounds every quarter that goes unmanaged.
Why the long tail leaks, structurally
In a seat-based collaboration product, revenue grows when a team adds people. Adding people happens for one of two reasons: someone in the team decides to, or something reminds them at the moment it would be useful. Enterprises have an account manager doing the reminding. A five-person startup on a Pro plan has nobody.
- The second seat is the whole ballgame. A design tool bought by one person is a tool. Bought by three, it becomes the place work happens, and cancelling it means disrupting other people. Single-seat accounts are structurally fragile no matter how much the owner likes the product.
- Expansion signals are visible and ignored. Files shared with people who have no seat. Comment-only collaborators behaving like editors. Invites sent but never accepted. Every one of those is a team telling you they need more seats, in data, without anyone asking them.
- Contraction hides inside a good NDR. 139% net means gross churn and downgrades are being masked by expansion elsewhere. In the long tail, seats go quiet months before a renewal is cancelled, and nobody notices because nobody is watching accounts that small.
This is the same problem I worked on at Maya, in different clothing. Millions of small merchants, none individually worth a phone call, and all of the growth sitting in whether you can act on behaviour automatically and at scale.
Three journeys I would build, in priority order
- Hypothesis
- Single-seat and two-seat paid teams that are already collaborating with unlicensed people will add a seat at a materially higher rate if prompted at the moment the friction appears, rather than in a monthly newsletter.
- The signal
- A file owned by the team is opened by someone without an editor seat, or an invite has been pending for more than seven days. The team has demonstrated the need. Nobody has to be persuaded of anything.
- The angle
- Remove the friction, do not sell the seat. “Three people commented on your file this week and cannot edit it.” The value is self-evident once it is stated as an observation.
- Guardrail
- Cap at one prompt per team per fortnight, and suppress entirely if the account is inside a renewal window being handled by sales. Nothing erodes trust with a sales team faster than marketing messaging their pipeline.
- Success metric
- Seat additions per eligible team within 30 days, treated versus hold-out, plus revenue per team as the confirming measure.
- Trigger
Unlicensed collaborator detectedOr an invite pending seven days or more
- Same day
In-product promptShown to the admin, in context, on the file itself
- Day 3
Email to the adminWho is blocked, and the one-click way to unblock them
- Day 10
StopNo third message. The signal has either converted or it has not
- Converts
Seat addedExit expansion, enter the multi-seat retention track
- Hypothesis
- New Pro teams that reach two active editors within 14 days of converting will renew at a materially higher rate than those that stay single-seat, and the invite can be influenced by messaging.
- Why now
- New Pro team conversions grew more than 150% year on year. The newest and most fragile cohort in the company is also the largest it has ever been, so a small percentage improvement here is worth more this year than it would have been last year.
- The angle
- The onboarding goal is not feature education, it is the second human. One teammate in the workspace changes the product from a subscription into shared infrastructure.
- What I would check first
- Renewal rate of single-seat teams versus two-plus-seat teams at first renewal. If the gap is small, this hypothesis is wrong and I would move budget to journey one.
- Success metric
- Share of new paid teams with two or more active editors at day 14, then first-renewal rate for that cohort against hold-out.
- Hypothesis
- Seat-level inactivity predicts downgrade at renewal, and a team shown its own unused seats 60 days early will either reactivate those people or downgrade voluntarily. Both outcomes beat a surprise cancellation.
- Why it is uncomfortable
- This journey can reduce revenue in the short term, because some teams will right-size instead of churning entirely. That is the correct trade, and it is the kind of thing worth arguing for with a number attached rather than avoiding.
- The angle
- Sent to the admin as an account hygiene summary, not a warning. “Four of your nine seats have not been used in 30 days.” Useful information framed as a service.
- Success metric
- Gross revenue retention in the treated long-tail cohort, plus voluntary downgrade rate as a deliberately monitored side effect.
The segment, as I would write it:
-- Long-tail paid teams showing expansion signal or contraction risk
WITH seat_use AS (
SELECT t.team_id,
COUNT(DISTINCT s.seat_id) AS seats_paid,
COUNT(DISTINCT CASE WHEN e.last_edit_at > DATE_SUB(CURRENT_DATE, 30)
THEN s.seat_id END) AS seats_active_30d
FROM dim_team t
JOIN dim_seat s USING (team_id)
LEFT JOIN fact_editor_activity e USING (seat_id)
GROUP BY t.team_id
),
unlicensed AS (
SELECT team_id,
COUNT(DISTINCT collaborator_id) AS unlicensed_collaborators
FROM fact_file_access
WHERE has_editor_seat = FALSE
AND accessed_at > DATE_SUB(CURRENT_DATE, 14)
GROUP BY team_id
)
SELECT t.team_id, t.plan, t.arr_usd,
u.seats_paid, u.seats_active_30d,
COALESCE(x.unlicensed_collaborators, 0) AS blocked_people,
CASE
WHEN COALESCE(x.unlicensed_collaborators,0) >= 2
AND u.seats_paid <= 3 THEN 'EXPANSION_SIGNAL'
WHEN u.seats_active_30d < u.seats_paid * 0.6 THEN 'CONTRACTION_RISK'
ELSE 'STEADY'
END AS lifecycle_state
FROM dim_team t
JOIN seat_use u USING (team_id)
LEFT JOIN unlicensed x USING (team_id)
WHERE t.is_paid = TRUE
AND t.arr_usd < 10000 -- the tail sales cannot reach
ORDER BY t.arr_usd DESC;
One query, two journeys. It labels every long-tail team as an expansion opportunity, a contraction risk, or neither, which is the input both journeys above need. This is the shape of query I would want running daily rather than as a one-off pull.
What I would refuse to do
A teardown that only proposes things is not much use, so here are two things I would argue against.
- A monthly newsletter to 675,000 teams. It is the obvious way to look busy in this segment and it will produce almost nothing except unsubscribes, because the message cannot be relevant to that many different situations at once.
- Discounting to prevent long-tail churn. In a product with strong collaborative lock-in, a discount usually buys a customer who was going to stay anyway and trains the rest to wait for one. I would rather spend that margin on the second-seat journey, where it creates a structural change instead of a temporary one.
Why I am confident about this shape of problem
Because the economics are the ones I have already worked in. At Maya, a fintech app serving millions of small businesses, no individual merchant justified a human conversation, and all of the growth depended on reading behaviour and acting on it automatically.
The Figma problem
675,000 accounts nobody can call
- 97.8% of paid customers under $10K ARR
- 139% NDR carried by the top of the base
- Expansion signals sitting unused in the data
- Newest cohort is the largest it has ever been
What I did at Maya
A merchant base too large to talk to
- Segmented behaviourally in SQL, not by tier
- Automated the journey in CleverTap
- Capped incentives so growth stayed profitable
- Proved lift against a randomised hold-out
Different product, same job: find the behaviour that predicts revenue, build the journey that acts on it, and prove the lift is real rather than seasonal. The vocabulary changes from transfers and GTV to seats and NDR. The method does not.
What would tell me I am wrong
- First-renewal rate for single-seat versus multi-seat Pro teams. If that gap is narrow, journey two is not worth building.
- How many long-tail teams currently have unlicensed collaborators on their files. If it is a small share, journey one has no audience.
- Gross revenue retention for the sub-$10K band on its own, separated out from blended NDR.
- Current message volume per admin per month, and unsubscribe rate by journey. If admins are already saturated, the first job is subtraction, not addition.
Next step
Skip the take-home test
Most CRM interviews end with an exercise you write on a weekend. Send me your actual retention problem instead and I will come back with how I would approach the first thirty days. If it is useful, we talk about the role.
Sources. All Figma figures are from the company’s Q1 FY2026 published results as of 31 March 2026. Percentages of the paid base are my own arithmetic on those published figures. Nothing here uses non-public information, and I have no relationship with Figma.
← Read teardown No 1: Wise, and the seven million first-time senders