How to make a YC demo video

I’m a YC alum, and alums get the privilege of reviewing YC applications. I’ve applied to YC 3 times, and have gone through the program twice.

Part of the application is a 1 minute pitch by the founders. It’s my favorite part because there is so much signal to noise in the video.

There are so many simple mistakes people make that get in the way of clearly explaining what you do. I want to outline a few so your videos get better.

Today is the last day to apply to YC by the way, so read this fast and get back to work. At the end of my post, I include my video for YesGraph.

Minimal Production Value

You can make the video off your smartphone or laptop webcam. The video quality doesn’t matter. Try to be in a quiet place without city car horns or babies crying.

Plan Ahead

You should outline what you want to say. There are only a few basic areas to focus on:

  • Who are you
  • What are you building
  • Who is it for
  • Why it’s awesome

For example, here is a minimal script: “I’m Ivan, I worked at Facebook and ran growth at Dropbox. I helped them grow 12X in 2 years. Now I want to help other apps grow. YesGraph can use machine learning to recommend exactly who a user should invite, boosting viral growth”

One of the best reasons to apply to YC is to refine your pitch down to a short bit of plain English. This editing is incredibly valuable.

Don’t Use a Script

When you use a script, you’re not talking to a human, you’re reading from a prompt. This doesn’t work because it masks your passion and creativity. Another problem is that the way people talk doesn’t match the way they write.

Make an outline, but don’t read from it. It’s only a minute long — you should be able to practice and avoid looking like a robot.

Don’t Use Jargon

Industry jargon is really confusing. Unless there is a really well known idea, like “PC” (you know, that thing that literally billions of people have), avoid using acronyms.

The problem with jargon is that it gets in the way of communication with people that aren’t as knowledgeable as you. They might sound impressive to you, but it is a barrier to understanding.

Don’t Use Complex Video Editing

Complex editing isn’t going to matter, but it will take time away from your plan. Even if you already made some explainer video for your website, don’t include it. Those are for different audiences.

Sometimes you might have founders in different places. First off, try to avoid that. It’s better for your company to all be in the same place. Beyond that, it can make video editing a little tricky because you want to include everything. I’d recommend taking snippets from each founder and putting them together — just introduce yourself. It probably also works best if one person gives the rest rather than a cute splicing of different people and ideas.

This balancing act happens in person too where you might not want one person talking the whole time. Just try to check your egos — you don’t need to split video time equally. Do what is best to convey the ideas.

Do Give a Shit

Passion is really important in startups because they are really hard to finish. Passion is what gets you through the marathon. Showing you care can help convey your drive, but also that you’re knowledgeable about your domain.

Keep It Short

You love your company, so you have a lot to say. But you need to edit it down to something others can easily consume. Reviewing might be watching dozens of these in a row. It’s inconsiderate to think your startup is so important that it demands more time. The actual signal you’re sending is that you are a poor editor and don’t understand your idea well enough.

Record Yourself, Watch it, Repeat

This is my favorite part. Record your video and then watch it. It’s incredibly painful. Plan on doing this a few times in a row. Even a handful of takes will get you much more refined.

This also helps you avoid using a script. You’ll know what you want to say and will have practice saying it enough that it’ll come naturally.

There is a wonderful Italian word that matters here: sprezzatura. It means to “to hide conscious effort and appear to accomplish difficult actions with casual nonchalance.”

If you refine with practice, you’ll get good enough to look brilliant but casual.

But I have a warning: you might get into the habit of saying the same thing so much that you lose your passion. You might have accidentally made a mental script that you’re reading from. You need to notice when you’re doing that and do another take.

Get friends to help here. Have them review the video and say whether you sound sane, robotic,  or passionate.

YesGraph’s Application Video

Note that YesGraph pivoted to what we’re building now, so at the time of this video I used a different name, SignalLens. We since decided to keep the name YesGraph because it’s better.

I’m sure this video has problems. I probably talk too fast, for example. But in my humble opinion it is better than most application videos I watch. And it’s not because I can say things like “Facebook” and “Dropbox” — but for entirely controllable things you can change. That’s why I wrote this post!

Subscribe to future posts here

Roach Mode

There has been an incredible amount of chatter about the coming downturn. Public tech stocks are down, but people are confused about how this might affect earlier stages.

You don’t want to over react and miss the opportunity in front of you. But founders tend to be hopeless optimists and bias towards driving off a cliff with their foot slammed on the gas.

So it’s time to consider roach mode: do whatever you need to do to survive, like a cockroach.

Study History

I feel old saying this, but some founders don’t remember 2008. There was a financial crisis that caused the funding environment to change very quickly.

Sequoia Capital went into freak-out mode and sent their portfolio a presentation called “RIP Good Times”. You should go and read the whole thing here. The advice is rock solid: cut burn now in order to save the company later.

More recently, Paul Graham wrote an excellent essay: Default Alive or Default Dead?

First Round describes the Watney Rule: “We need to act like we’re Mark Watney in the Martian. We can’t assume we will get a shipment of new potatoes to save us.”

Roach mode” rhymes, so it might be easier for founders to remember. ?

Investor Relations

If you’ve raised money, talk with your investors. Mine have been proactive about explaining how they think the environment is evolving. Hard times are a test for the quality of investors. The best investors are honest and transparent, making them predictable even in hard times.

I love our investors, and they’ve expressed strong support for us. But I’m going to act like that isn’t true. Roach mode means acting like there isn’t more money coming.

Another version of this is taking a lower valuation than you expected. If you shut down your company because of some valuation pissing match, you’re an idiot.

Revenue Structure

There has been a major problem brewing in SAAS businesses: they can predictably grow revenue, but normal accounting makes it look like they lose money. Spend $1K in ads and sales team comp, in 12 months you get back that $1K, and in another 12 you make another $1K. This sounds like a deal until you realize this depends upon external funding to push growth through the short term trough of losses.

Some SAAS companies see this pattern and push to be paid early. For example, eShares just changed to annual billing. This means you pay upfront for a year so that the company doesn’t go into the hole at all. The problem with this approach is that it doesn’t match up with customer value. Any decision that is good for your business but bad for customers should be suspect. But in roach mode, every option is on the table.

Check out this excellent post about strategic finance for more.

Screenshot 2016-03-10 15.14.15

New Revenue Channels

YesGraph recently launched an awesome class around growth, where we help you build an experimental process, understand your analytics, understand virality, hire for growth, and more. It is not free, but compared to the value it’s cheap at $199. Check it out here:

Why are we doing this? One of the reasons is that it’s a lead gen source for us — a premium content marketing play. But there are other structural issues. If we can run ads to get people to pay for the class, then the paid acquisition strategy isn’t the same as the problem in SAAS with marketing and sales costing too much up from. We can efficiently run ads to buy the class, which then pays off immediately.

Plus the ad campaigns we run are going to be open to people that take the class so we can demonstrate what paid acquisition looks like. That’s delightfully meta.

We’re trading more leads with high quality leads (you’re willing to pay for growth), and biasing towards immediate revenue.

We just launched another similar effort: growth teardowns. We just reviewed Telegram Messenger, and are queueing up more. These aren’t free: we’re essentially scaling consulting work in a way that strongly aligns with the service that we build. We’ve been helping YesGraph’s customers with growth advice already, so this fit our mission of helping companies grow faster.

Similar to the growth class, we can run ads to the teardowns to get more clients. It’s transactional and more efficient than other kinds of lead gen. If you want to better understand your growth, email

Screenshot 2016-03-10 10.49.58

Cutting Payroll

Besides expensive paid acquisition, another major expense for many companies is payroll. Good engineers are expensive, so one of the simplest ways to live longer is to cut payroll.

This is brutally hard at times, but that’s roach mode. Take this slide from RIP Good Times.

Screenshot 2016-03-10 14.55.55

If you cut early, you’ll have the extended runway to live forever. If you don’t, you’ll fall off a cliff.

But use your judgement here. YesGraph has recently hired some excellent engineers. I don’t think we have too many. I think we have enough to take on the opportunity, and we’d be strained to make progress with fewer people. We’re already lean because I started out sensitive to over hiring, even without a downturn coming.

Your Strategy

I might be doing something obviously wrong. Some people think offices are expensive, but our office is less than 3% of our expenses. We still buy food, but that’s less than 1% of our expenses.

One reason I wrote this is to hear what I might be missing. So tell me in the comments or email me:

Subscribe to future posts here

Growth Teardown: Telegram

We’re starting something new on this blog: breaking down a product to better understand its growth. This means both finding out what they do well and suggesting ways that they can improve.

We just launched a guide to growth, and breaking down different apps is a natural extension: from theory & tactics to practical ideas for a specific app.

We’re channeling our inner, where Samuel Hulick breaks down the onboarding for new products. Samuel is a friend of YesGraph — check out our interview with him here.

Our first review is of Telegram, a very popular messaging app. If you like this and want it for your own app, get in touch at

Check out the embedded slideshare below, or the raw pdf here. We also recorded a voice-over video so you can just sit back and listen. You’ll want to go full screen and take notes.

If you have any feedback on the format on content, email me:

To get future teardowns as soon as they come out, subscribe here.

Just Launched! Our Complete Guide to Growth

The problem with “Growth Hacking” is that there are legit growth teams at companies like Facebook and Dropbox, but there is still a huge amount of confusion about how to actually drive growth.

It doesn’t help that much of what you can read about the topic isn’t from people that have done it at scale. Worse yet, a general problem with advice is how to synthesize good ideas from others into what you should do for your own company.

We’re launching a class on growth to help solve this problem. We want to help companies get a grip on their data, understand their users, make better decisions, and grow faster. We want to dispel the bullshit and instill the practical advice that you can use today.


I’ve been obsessed with this idea for years — ever since my first startup didn’t take off and I learned how Facebook ran their growth machine. I ran growth at Dropbox and refined my advice — and since have talked to hundreds of companies about what works and what doesn’t.

At YesGraph, We build a product that can help with growth. But much of what we’ve learned about growth isn’t something that can be productized. These lessons learned are about how you think and organize your team. It’s how you run experiments. It’s how you ask the right questions.

So check out the class right here.

This class covers analytics, virality, referrals, growth process, hiring and more. We’ve embedded the syllabus below — it’s pretty long! The format is video lectures plus written essays. We think this will help you get two perspectives to better understand the material. The first lecture is free to preview!

On top of all this, we’re making a living document. We’re going to take feedback, and upgrade the class. This might mean more examples, more exercises, and more topics covered. If you purchase the class, you’ll access to all this new material for free. Feedback loops are as essential part of making your product excellent — and this class is a living example of how much we believe in that.

We have more coming soon too! We want to have more options, like product reviews and maybe even off-sites! You can email me anytime with feedback or questions about the class:

Subscribe to get more updates here.

>>> And here is the class link one more time <<<

class plan syllabus 600

YesGraph Javascript Library Now Available

We just released the first version of our Javascript SDK. This makes it easier to integrate YesGraph into your web app.

The library we’re releasing today helps manage YesGraph’s API. What we aren’t launching today is the user-facing features. We wanted to get the library out faster for some apps that need it. If you already render contact lists, this is for you.

You can head over to our documentation page to learn about how to do the integration. It’s just one line of code, plus we use jquery. We’re working with Amazon Cloudfront as a CDN, so you can include it directly in your page.

Screenshot 2016-02-08 12.20.08

That’s minified, and you can see the code on our Github repo here.

We’re not done! We’re working on a flow that will actually power the user-interface to send invites in email and social channels. That’ll take a few more weeks — we’re really excited to launch that as soon as possible!

We’re actively working on this and would love your feedback. Please take this survey if you’re interested in influencing what we build:

You can also email us at anytime.

[Navel Gazing Startup Post]

Mark Cuban thinks YC founders are entitled. PG thinks Shark Tank is a waste of time.

PG is right, because of the way founders behave.

Screenshot 2016-02-02 09.01.48

Context: I’ve been through YC twice and Sacca was an investor in my last startup. I think everyone involved here is bright.

Founders put a lot of weight in Shark Tank, and invest too much in getting there and performing. Sacca and Cuban are acting like the founders got up that morning with no plans and spent 10 minutes pitching millions of consumers. The problem isn’t Shark Tank but the way founders behave around it.

This is a specific version of the general phenomenon: founders seek some magic bullet, some golden ticket to solve growth. I’ve written about that here, “The #1 Mistake in Driving Growth”. It’s a mistake. Founders should focus on making the best product for their customers. They should do marketing too — focused on sustainable progress (probably not PR).

Cuban saying YC founders are entitled is both 1) obviously true and 2) difficult to distinguish from Cuban’s anguish over the price of the rounds for YC companies. The fact is that there is a market for company stock, and YC companies get higher prices. They expect higher prices and more, which is entitled, but they get them, to Cuban’s chagrin.

Is it lost on the people looking on that Cuban has a strong business interest to dismiss the value of YC so that he can get a better deal? It’s so transparent it is barely worth mentioning, but apparently people don’t notice the conflict of interest. Plus people like Cuban predict that deflation of prices in some bubble burst as often as founders complain that VCs are slow and lack vision.


Grow Faster with YesGraph’s Android SDK

We’re happy to announce that YesGraph’s Android SDK is now available!

Like our iOS SDK, it powers the whole invite flow for mobile apps. We built the most performant design, meaning you can get better performance with less work. Plus it’s open source on Github! (Here is the repo, and here are our docs).

YesGraph’s contact recommendations are built in. Users see suggested contacts that are the most likely to get invited and accept invites. Here is the flow:

android-demo trimmed gifbrewery

But there is another interesting feature that highlights the long term power of YesGraph. It’s got me so excited!

Unlike iOS, Android contacts contains wondeful data like favorites and a people you’ve recently contacted. These are wonderful signals to highlight your top contacts. This data just isn’t available through APIs on iOS.

But YesGraph is more than a simple utility for sending invites. It’s a powerful social graph database with machine learning running over millions of points of data.

If you have both an Android app and an iOS app and use YesGraph,  you can can leverage this incredible data on Android for your iOS users. The data just isn’t available on iOS, but the reason this works is social graphs. No really, they are like a super power!

Your Android users are connected to people that are on iOS. Affinity data across your users is symmetric in many ways. In other words, knowing the close friends Android users have on iOS means you know some close friends of your iOS users.

Normally only big data teams at LinkedIn and Facebook and Twitter do this kind of analysis. This is what makes YesGraph powerful: we leverage all of your data to deliver better results.

Let’s walk through an example. Let’s say Anna uses Android. His contacts look like this:

  • Beth
  • Carl
  • Dennis
  • Esther (favorite)
  • Hunter (favorite)

YesGraph’s ranking puts Esther and Hunter as suggested invites because they favorites. Anna invites Esther, who signs up on iOS

Esther’s contacts are:

  • Angie
  • Bob
  • Carole
  • Hunter (yes, the same Hunter that Anna knows — they have the same phone number).
  • Finn

Without any other information, you can apply a few social graph heuristics:

  • Hunter knows both Anna and Esther
  • Hunter is a close connection with one of Esther’s close connections.

Then we can rank the contacts:

  • Suggested:
    • Hunter
  • Alphabetical:
    • Angie
    • Bob
    • Carole
    • Finn

This social graph analysis and cross pollination of your data is a really big deal. This heavy lifting is why YesGraph can deliver far better performance for your invite flow or referral program. Plus it adds a network effect to every app.

To get started on Android, create an account on YesGraph to get access to our service. Invite your developers to join in, and check out the Android docs and Github repo.

You can get help by emailing and joining the YesGraph growth community slack here:

Subscribe to get new blog posts here.

The Top 5 Analytics Tasks for Your New Startup

So you have a new project and you want to setup your analytics. This post is to understand the minimum you should be doing.

Don’t fret! The companies with the most advanced data systems like Facebook and Amazon and Netflix didn’t start out with that system when they were young.

And the good news is that tools and services have grown substantially better in the last few years. This post will be opinionated but you can trust that you’re doing the right thing.

Oh, who the hell am I to have strong opinions? I ran growth at Dropbox and my startup YesGraph focuses on helping apps grow so I constantly talk to companies about their metrics, analytics, and growth. I’ve seen every stage, from startup to Facebook scale, so to reiterate, this is for young startups.

0. It’s event driven, obviously

If you’re looking at Google Analytics for pageviews, you’re missing what users are actually doing. Good analytics starts with the user experience, which means following a series of events the user went through.

Some would argue that this should go further, that you need to look at events and the state of the user at the time. I agree, but that’s starting to get complicated, like with advanced cohort analysis. The real point is that some people don’t even understand event based systems and are looking at vanity metrics. So let’s not make perfect the enemy of the good.

I’ve talked to some growth managers who have trouble explaining the idea of event based analytics to their management. That’s crazy. Your management might be incompetent, so email me if that’s you:

1. Abstract calls to analytics events.

You want to make adding analytics events really easy. In your code, create an abstraction for logging an event that you can call from anywhere, (web front end, app server back end, mobile client). This helps avoid having vendor specific code peppered across your codebase. This will also make switching vendors much easier and your code easier to read.

On your app server or mobile app it might look really simple:

log_event(some context, the user, stats, etc)

This doesn’t need to be some huge library.

On the front end, you can make a similar call in javascript. Plus you can go further with connect triggered events. I’ve implemented an attribute system so that a click on an element like this:

<div click_event=”signup button”>...</div>

…would trigger a call like this:

log_event(event=”Button Click”, 
click_target=”signup button”)

That makes adding front end instrumentation very easy. This whole effort is to make it easy to think about and add instrumentation. If instrumentation is painful, lazy engineers will leave holes. Fun fact: all good engineers are lazy; that’s why they are so fast.

2. Abstract your vendors with Segment or MParticle

Now that your whole codebase is insulated, what happens inside “log_event”?

You should log analytics events using Segment or MParticle. I prefer the former. These services aren’t like Mixpanel, where you feed data and then look at dashboards. They multiplex out the analytics events to different services like Mixpanel and Amplitude.

This lowers the switching costs of trying new tools. It doesn’t require a code change! If you can try a new tool easily, you can move faster and have more agility with your analytics. This also means you aren’t locked-in to a specific vendor.

segment dashboard 600

3. Store you own analytics data

Segment makes this really easy, whether by using their webhooks to store events in your own DB or using their service to send the data to your database directly with “warehouses”.

Storing your data is essential because not every question can be answered with a tool. If Mixpanel can do it, awesome. If not, it’s better to code a solution on your own data than to not answer a question.

Sometimes it takes correlating events with other data you have, like subscription states or other objects in your DB. It could be that a Business Intelligence tool can help do this work for you, but if you’re just starting out, that is unlikely to be your best solution.

If you’re logging events from multiple platforms, syndicating out to Segment and getting everything back in one place with webhooks is technically less work than storing the data yourself first and then syndicating out to segment. For the latter, the biggest headache is working on APIs to ingest front end and mobile client events.

4. Instrument the User Experience

Now that you’ve established your analytics pipeline, you need to add your events. The way to do this is really easy: just pretend you’re a user. Walk through your onboarding and core product and write down what happens. Each event you notice matters.

If you have 10 or fewer, you should probably go into more detail. If you have 50 at the start, it will be hard making sense of them later. This is one reason I don’t like systems that automatically log events, because it’s hard to make sense of the deluge of events. Systems that do this, like Heap, might get better with time.

Note that it is really easy to add events, but this can cause headaches later. So you want to be conscientious about which events you have. The literal strings used as event names unfortunately matter here. So pick a format and decide on the degree of detail. You don’t want to have multiple events like: “User signed-up” and “SIGNUP”.

I like to put all the events in a single file in your code to the degree that is possible so that it’s clear what all the events are. Front end vs back end makes this painful to do 100%.

Sometimes having a high level event with a data attribute is better than lots of events. Let’s say you have a social signup experience using Twitter and Facebook, plus an email signup option. Sometimes you care about the channel but usually you just care about the signup.

So this is better:

{‘event’: ‘SIGNUP CLICKED’, ‘channel’:’Twitter’}{‘event’:‘SIGNUP CLICKED’, ‘channel’:’Facebook’}{‘event’:‘SIGNUP CLICKED’, ‘channel’:’Email’}

…than this:


Similar things are true for web page views, button clicks, and other kinds of events.

Eventually your data team is going to go crazy with the problems here and start versioning their analytics like your database, API, code base. I wouldn’t bother with that effort at the start.

What are some good events? Here are some that come to mind, as I imagine a user walking through some SAAS app:

  • viewed blog post
  • viewed landing page, with referrer tracking to the blog
  • clicked learn-more
  • viewed pricing page
  • viewed create account page/modal
  • entered email in create account form
  • create account form submitted
  • user signed up
  • viewed onboarding step 1
  • email sent, (welcome email)
  • user created project
  • user viewed integration page
  • user sent invite
  • invite landing page viewed
  • invite accepted
  • user sent message
  • user signed out
  • email sent, (subscribe email)
  • user subscribed

I could go on. This app isn’t even real and I came up with over a dozen things to track.

5. Product questions compel analytics NOT vice versa

So now you have instrumented events that are getting logged into data systems meant to analyze it. Awesome! So the next step is to look through Mixpanel, right? Wrong!

Start with your product experience and ask questions. Those questions will rely upon your analytics to answer them. Sometimes you might need to add new events to answer the questions. Sometimes you need to write code if the tools aren’t up for it.

The big problem with starting with the tools is that you are immediately biased by what the tool shows you. You aren’t thinking about the truth, but of the buttons and graphs on their dashboard. These are general purpose tools not designed just for you.

Don’t get me wrong: if you can answer a question with a tool like Mixpanel, go for it. But don’t confuse the tool with the goal. Your goal is to make your product fucking awesome. You do that with relentless focus on your users and their experience.

This last one is recurring. You have a question, sometimes add events, find your answer, run an experiment, and measure the results. Do this again and again to make your product better, which is the point of your analytics systems.

I’d love to hear what you think! Try this out, check out YesGraph, and email me:

Subscribe here to get new posts from our blog.

Creating a Web Referral Program with YesGraph

We write a lot about referral programs at YesGraph because our product helps make them better.

We’re written about which metrics to track, how to test whether a referral program might work, and described dozens of tactics to improve performance.

In this post, we’ll cover exactly what it takes to create a referral program and add YesGraph. This is for people just getting started. If you have a referral program and want to increase performance, start from step 4.

1. Invite URL to track referral signups

To track performance and grant rewards, you need a way of having one user share a link or code with a friend to get them to sign up.

Uber made popular having a referral code because lots of sharing was in person, but we have supercomputers in our pockets and links are easier to click than typing a code.

The simplest invite link just has the inviter’s username or a referral code, like this:

That url should go to a registration page. Making this a dedicated registration page separate from your normal signup form is a good idea because you can optimize it as a referral landing page.

2. Grant a reward

Many apps create an incentive to send referral invites. This helps motivate the inviter to send referrals and motives the invitee to accept the invite.

dropbox bonus

You don’t need to grant the reward just on signup. It can be deeper in the funnel. Dropbox required the invitee to signup, install the desktop client, and sync a file. This helps bring in better users and motivates users to go deeper into your product. It can also help avoid some fraud.

Note that regardless of the vendors you’re using, you’re probably going to have this build this part yourself. General purpose vendors might make system that work on some platforms, like Shopify. But granting a reward probably requires custom code.

The reward doesn’t need to be money. Extended trials, time on pro features, and some currency like Dropbox extra space all work in the right context.

3. Prompt users to refer

Think about marketing a referral program like you would any other product feature. It isn’t “if you build it, they will come”. It never is, but people seem to forget that for referrals.

In fact, tracking what percentage of your users even participate in your referral program is a primary metric. You should try to make it be as high as possible because this is the top of the referral funnel.

Start with prompts in your app and emails to your users. Consider creating multiple or recurring prompts so that it isn’t just new users that are told about the program.

Ideally, embed the prompt in the product experience. This is why messaging apps and social networks grow so fast: users are frequently active and the products are about communicating with friends. For example, for ecommerce or marketplaces, prompt upon purchase.

dropbox getting started

4. Add sharing channels, including contact importing

If you have an iOS app, congratulations, you’re done. Just add the YesGraph iOS SDK, which includes all the right parts for sharing channels and sending invites. Read more here.

We’re about to launch an Android SDK and also a web SDK that will completely solve this problem.

There are a few basic channels:

  • copy the invite link, to share wherever
  • social networks, like Facebook and Twitter
  • email, where you type in the contacts
  • contact importers, where you select among contacts

If you track the performance per channel, you’ll find email is the highest converting channel per invite. So the goal is often to drive more email invites. You just don’t have as much control over a shared link or Facebook posts.

So add a contact importer to really start to scale. Typical contact importer channels include Gmail, Yahoo Mail, Outlook, Hotmail, and Aol. It’s a fair amount of work to add these and others, which is why we’re building Superwidget.

dropbox invites

5. Add YesGraph suggested invites

The problem with contact importers is that there are typically hundreds if not thousands of contacts. If you allow users to send to all of them, your app will get marked as spam and your emails will stop being delivered. It’s a bad experience for everyone.

YesGraph helps recommend exactly who users should invite. The most successful apps use yesGraph to recommend who among the hundreds or thousands to invite. We filter out spam and duplicate contacts.

Most importantly, YesGraph builds a machine learning model to rank contacts just for your app. This is heavy lifting that normally only data teams at huge companies like LinkedIn and Facebook could hope to accomplish. The signal to noise is so high that you can even pre-select our recommendations to drive far more invites while maintaining an excellent user experience and good deliverability.

suggested invites

Send contacts and getting recommendations means using YesGraph’s API. If you have any trouble, email In short, raw contacts go in, and ranked contacts come out.  Read more about YesGraph’s API on our documentation page. We have an SDK for Python apps too.

POST /address-book → suggested contacts

To exclude current users from our recommendations, use the API to tell YesGraph whom to exclude.

POST /users

To help improve YesGraph rankings over time, tell YesGraph which invites were sent and accepted. This is the basis for our machine learning models and helps us understand your app.

POST /invites-sent
POST /invites-accepted

6. Track performance and iterate

Like any other product feature, there is a support lifecycle after launch. Referrals might be unique in how much optimization is worth it. Unlike other features, optimization directly leads to higher growth.

So you’re going to run multiple tests to get better performance over time.

YesGraph helps here too, in a few ways. First we automatically get better with our contact recommendations from tracking what invites are sent and accepted. We also constantly refine our invite flows available through our SDKs to put forth the best product design.

We also can help reflect what is working through our metrics dashboard. We reflect invites sent and accepted and have powerful cohort analysis tools.
To get started with YesGraph, create an account and invite your developers to dig in. Email with any questions — not just about integration but about your whole referral program. We’re here to help you grow.

cohort graph 600 invites graph 600

Subscribe here to get new posts from our blog.

An Enormous List of Referral Tactics

I ran growth at Dropbox where I tested dozens of optimizations on the referral program. I now make YesGraph, which uses social graph analysis to help companies grow — so I constantly talk to companies about optimizing invite flows.

This post puts together a big list of things you should consider for your referral program. If you like it, check out YesGraph and also our class on driving growth.

#1 Set Expectations

Adding a referral program can be easy, but optimization can be a lot of work. So set expectations.


One problem here is growth experts that wag on about k-factor and other metrics that imply everything is going to blow up.

Most apps I’ve seen that pop spectacularly with virality are actually sacrificing product quality and end up coming back down to earth fast. These is even a name for it: the dreaded shark fin graph.

The good news is that there are a lot of tools that can help reduce the cost of achieving high performance. That’s why YesGraph is here.

In our growth advice, we focus a lot on triage. You should take any bit of advice as a suggestion to include in your triaged growth roadmap and be wary of any posts saying “do these 32 things to grow”. That said, read on to see the rest of our 32 tactics.  ?

#2 Measure Happiness First

Before adding a way to tell their friends about your product, measure if they people like your product.

There is even a survey you can run that matches this well. The NPS survey asks “How likely are you to recommend this product to a friend? Why?”. That is literally what a referral program is asking users to do. Another way to measure is with behavior, namely retention. If people are retained, they like your product. We wrote more about this in our post: “3 Things You Must Do Before Building a Referral Program”

#3 Establish Basic Metrics

Your main performance measurement is growth. But you also need to measure your funnel.

The reason is to know exactly where you should focus your optimization efforts. This measurement and optimization theme is found throughout this post.

I like to look at these three:

  • The percentage of users inviting
  • The number of invites sent
  • The signups per invite

Read more in this post: “The Top 3 Actionable Metrics for Any Viral Flow”

The basics are important because they tell you where to focus your optimization. It might be that conversion to signup is low for invitees. It might be that people don’t even know you have a referral program.

#4 Make a Sharable Link

The first step to implement a referral program is to record the inviter when an invitee signs up.

Here are some example links from a few programs:


This is obviously really easy to implement. It’s just a url with some tracking. There are different ways to do it, and we’ll get to more of the tracking details later in this post.

#5 Reflect Invite Status

Users of referral programs want to know whether an invitee signed up. You’re tracking it anyway, so show them.

This kind of reflection of status also helps motivate more invitations. It reduces load on your support team because so many questions will be about status and rewards. All it needs to be is a list of invitees and signups and what state they are in. Here are my Wealthfront invites.

reflect status

#6 Add a Symmetric Bonus

Symmetric rewards help lower the social cost of sending a message to someone.

I think people misunderstand what is going on here. Sure, getting a discount to a service is wonderful. Your users will probably love it. But for people that have never used your product, it might be hard to understand the value of the bonus.

The real reason an invitee signs up is because they got invited. That was the whole point. The bonus is marginal.

It’s the sender that is more interesting. They probably want the reward more, and making it symmetric means they feel like they are giving a gift. I’d like to see this rigorously tested to really know, and it probably varies from product to product.

#7 Avoid Money

Dropbox’s referral bonus of extra space is a wonderful virtual currency that avoids cents.

Just look at the math on Dropbox’s pricing. 2GB is Free. 0.5GB for a referral bonus. Paid is $10/mo at 1000GB. Compared to paying for a year, that 0.5GB is worth less than $5.

This is a cultural issue, but $5 doesn’t seem as much as 500MB. Plus you can invites lots of people and get 16GB, which seems enormous compared to 2GB.

The reason the GB and MB work is because they aren’t $$. This kind of virtual currency helps insulate users from counting pennies.

One thing going on here is market vs social norms. If you ask a lawyer to do pro bono work for a good cause, they might say yes. If you ask to pay them $10/hr instead of their normal $300/hr rate, they are more likely to refuse. Social norms help anchor us in interpersonal relationships. Once you bring in money, market norms start to take over.

If you’re asking users to invite friends, this matters. A virtual currency can be irrationally valued, like Dropbox space. And avoiding dollars and cents helps people avoid thinking they are shilling their friends for spare change.

Airbnb is a little different. Their average purchase is very high, in the hundreds of dollars. Users buy multiple times, so Airbnb is making $1000s. So their referral program is at a higher value, $75 for hosts and $25 for guests. That’s enough to start to be motivating. Uber’s driver referral program is even higher.

#8 Avoid Initial State Downer

Always consider your products initialization state. For referral programs, the mistake is a big fat ZERO.

The copytext often literally says “you’ve earned $0” as a headline. For an initialization state, talk about what could be there. For Dropbox’s referral program, you’re the rocketship on the way to the 16GB moon.

bonus space

You don’t need a cute drawing though. Just change your copy text to be optimistic.

#9 Track By Channel


You should track performance of referrals by the channel where the invite links are shared.

I see the mistake of not tracking all the time. It’s obvious because there is no tracking data in the link itself. The pattern will just be

Operationally, you know where to focus your optimization by looking at what is working and what isn’t.

The good news is that YesGraph is working on making this far easier for the web, building a one-line flow to add all these channels. Read more here.

#10 Channel: Global Link

global link

Call out the actual link to share because it gives users control of where they share it.

Often referral programs will hide the invite link, but that forces users to share on the channels you’ve created. Giving the user control means those with initiative will use the channel that is best for them, be it Facebook or Craigslist Missed Connections.

One detail here: make copy and paste easy. This will require a bit of flash to work. That flash is going to be a headache and eventual security vulnerability, but do it anyway.

#11 Channel: Social Sharing

Static social sharing links are the incredibly easy to add.

social sharing

You can optimize each of these channels individually, and you should track how those platforms evolve. You can look at http referrer traffic to your landing pages to see if people are using a channel you don’t directly support. You should definitely test the copy of the actual message sent (like the tweet you use by default).

#12 Channel: Direct Email

Make it easy to share a referral invite by typing in an email directly.

direct email

These will be the highest converting invites of any channel because the filter to remember a friend’s email is incredibly high. You’ll want to focus a lot more on email once you look at the numbers here.

A common mistake here is making the input too rigid. You want to allow someone to copy and paste some blob of contacts. Just accept any input and parse out any valid emails. Users are lazy, and you should make it easy for them.

#13 Channel: Address Book + Suggest Invites

The most successful channel for every invite flow is the bulk contact importer.

The reason is that selecting friends from a list is far easier than remembering emails. So users select a lot more contacts.

Some apps have “select all”, but I think this ends up tricking users to send more invites than they expect. You’ll get marked as spam and your higher converting email channels will suffer.

The solution is to use YesGraph. Check out this example from Paribus, an early YesGraph user. YesGraph filters and recommends the most relevant contacts, and Paribus by default selects the top recommendations. Because YesGraph increases signal to noise, Paribus can dramatically increase their referral program performance.

paribusThis is all true on mobile as well, but the contacts come from the mobile address book. YesGraph’s iOS SDK make building this feature much easier. Mobile brings other issues too, like how you should send SMS messages.

YesGraph iOS SDK 100

#14 Channel: Local Messaging Services

On mobile, a user might have a niche messaging app that are ideal for that user.

local messaging

Take advantage of this by testing inclusion of those channels. This might mean including a link just for that app. On the web, this manifests itself with the long tail of email providers to import contacts.

#15 Put Inviter’s Face on Landing Page

Customize landing pages with the inviter’s face and name because people just love faces.

It must be innate, because the stats here are just crazy. You should always seek to optimize your onboarding, but referral programs have the edge because the inviter is a big part of the experience.

The example below is from Airbnb. That handsome mug converts like crazy. ?

airbnb landing

#16 Mobile Custom Landing Pages

Custom mobile landing pages are less common but just as important as on the web.

The mobile onboarding experience can be a big of a mess:

  • Get a link
  • Click to a web page
  • Enter your phone number
  • Get an SMS
  • Go to the app store
  • Open up the app
  • Fill out a fat form

Anything you can do to make the pull of the app stronger or the experience smoother is a must to improve conversion rates. The specific flow that works best depends on your app.

For example, you might want web registration and then promotion of your app via email or phone number. Maybe you want to forward all web traffic to the app store and hope your landing page is enough to convert. Traffic on mobile vs on the web is probably different too.

But to get mobile pages to be customize by referral links, you need to use deep linking. This allows for a custom experience in the gap between clicking a link, installing from the app store, and opening the app. There are plenty of tools to help here, like Branch Metrics and Yozio.

We have something in the works at YesGraph for this, but it isn’t quite ready yet. In short, we can show a hell of a lot more of those clickable faces. Register to get updates on this here.


#17 Pre-fill Registration Forms

If you already have information about the invitee, make the registration experience easier by pre-filling the right fields.

dropbox pre-fill

Apps don’t do this enough, and it isn’t clear why. You see this a lot with Facebook connect, where the user hands over a bunch of information and the app asks for it again.

A general conversion rate optimization tactic is to require less from the user to complete the conversion. It applies to lots of parts of your site, and to your referral registration page too.

#18 Measure with Comparable Metrics

To understand channel performance, break down the stats to have a common denominator.

Let’s take two examples: direct email vs Facebook posts. Here is each funnel and metric.


  • participation: users sending email invites / users visiting referral page
  • broadcast: # invites sent / users sending email invites
  • conversion: # registrations per invite / # invites sent


  • participation: users clicking on Facebook / users visiting referral page
  • broadcast: # visits to Facebook referral links / users clicking on Facebook
  • conversion: # registrations from Facebook / # visits to Facebook referral links

What if you took the product of either three. Then the units are the same:

  • # new users / # referrers

This is a viral coefficient. That’s awesome because you can now explain which channel is performing better. It could be that performance per participant is higher but that the share of users participating in a channel is smaller.

This is awesome data for experiments — maybe making the performant channel more prominent can increase overall performance. Or maybe it’ll cannibalize other channels. Test it and see!™

#19 Consider Editable Messages

Allowing users to edit invite messages might increase conversion to signup but might also decrease conversion to send.

Here is an example from Wealthfront. That app is a good example because people are so skeptical of financial services. So in their case they want to build more trust and get higher quality invites.

wealthfront message

One issue here is how you allow for editing. Don’t include the actual invite link in the message. You’re allowing users to customize the message on top of your invite link.

This is actually pretty painful to implement. Rather than just keeping a list of invitees, you need to store the message too. And you now might have a spam vector, so maybe you want to filter the content. What a pain.

For mobile, this is actually incredibly common. The reason is that so many mobile apps just push users to send via native compose flows, like SMS. Here is an exampleI found yesterday from Peach. Note the lack of tracking on the invite link. Tsk Tsk, Peach. ??

peach invite

#20 Test Positioning

How you talk to your users about your referral program matters quite a bit.

Dropbox focuses on “Get Extra Space Free”. Airbnb talks about “the gift of travel”.

Some positioning include:

  • Give a Widget get a Widget
  • Get extra Widget free
  • Give the gift of Widgets
  • Go anywhere, stay for less!
  • Refer friends, get $X off your next Widget
  • Get credit

You can test what works best for your audience. If you’re more focused on brand identity (like Airbnb is), you could just mirror that ideal experience. For example, Slack says you should “be less busy”, so a referral program could focus on giving people more time.

#21 Track Placement

You should understand which marketing channels for your referral program drive the most usage.

This post has focused on which channel works when someone gets to the referral page, but how do users get to that page? How do they learn about the program.

You can go so far as to modify the invite link to track the placement. That way you can answer questions like “which promotion leads to the most successful referrals”?

I’ve seen this implemented as params on the link. Something like this:


#22 Placement: In your Header

Link to your referral program at the top of your home page.

This is very low cost. If shown to users that haven’t signed up, it can be really good priming. It might motivate signup and then also serve as a first touch before the user is ready to invite.

But generally only a small subset of users are going to be actively clicking on that link, so the total performance might be less than you expect. That’s true for all these placements actually. This is one reason why people have unreasonable expectations for referral programs. For some reason they assume a “if you build it, then will come” mentality. Nope, you need to earn it.

#23 Placement: in the product flow (Best)

The best place to promote your referral program is right in the product flow.

For example, if there is a social graph component to your app, giving some bonus to send invites would mean all users would participate.

This varies across apps and might come as a cost. For example, whenever there is a purchase, mentioning a way to get a discount on the thank-you post-purchase page could work. But there are often a lot of competing desires within your company for what belongs in that page.

One of the best examples I’ve seen is from Roll, another YesGraph customer. Roll is like Tinder for your photos, where you swipe up to share and down to not. Then you see a feed of photos from others where you swipe up to like and down to skip. Within that feed, they suggest specific contacts to invite: swipe up to invite, swipe down to skip. It works incredibly well as an integrated product experience.

roll embedded invite 200

#24 Placement: Literally In the Trough (Bad)

I see a lot of apps copy Uber’s rider referral program without considering that Uber is supply constrained.

They push hard to get more drivers. The demand side, the riders, was only recently optimized. The left-hand-nav trough of sorrow is not the best place to put your best growth channels. So don’t copy Uber. No one will see it and use it.

uber placement

More recently, Uber has been putting prominent promotional modals right when you open the app. Even without seeing the numbers, this is obviously more effective.

uber new placement

#25 Placement: Email Reminders & Invitation Status

Email users about the referral program repeatedly and include their past invitation status.

It’s important to think about user lifecycle here. It isn’t like someone signs up, sends invites, and then quits. For apps where users are more engaged (as opposed to transactional like ecommerce), the opportunity is to get users to share many times over months and years. So reminders help drive the repeat usage you want to improve performance.

Here is an example from Wealthfront. They manage money a bit like a bank, so their users are definitely engaged for the long term.

wealthfront email reminder

#26 Placement: Even more emails

If a notification email has a weak action, consider including a promotion of your referral program.

Here is an example from Dropbox, where adding “PS send more referrals” to lots of emails ended up driving a 13% increase in already-superb participation. This kind of promotion can come in lots of places.

dropbox ps

#27 Watch Effects upon Unit Economics

If you sell some physical good, watch out on the dynamics of unit cost and referrals.

Let’s say something costs $6 but you sell it for $8. Then you have a referral program that gives away one for free to the recipient. That means the recipient would need to use the product 3 more times before making back the $6 lost on the first purchase. It’s worse for symmetric bonuses, where the inviter also gets some credit.

It gets interesting when you look at how some of these VC funded companies are run. Sometimes things that cost $8 are sold for $6 to get an established user base. By that math, the less a new user buys, the less lost.

But these businesses aren’t crazy! Often they are heavy on logistics, and density of customers actually affect the unit economics. Costs like drivers, cars, distribution centers and bulk supply all change by volume. So by growing in a specific region, the unit economics can change from losing money to making money.

We wrote more about this in our post “When to Layer Virality”.

One product initiative at YesGraph that is exciting here is the location directed invite. What if a service would bias their invitation flow towards a new city that could turn on. It could be part of a city launch playbook and would affect time till the city is making money. If you’re interested in this, email us at

#28 Fraud: Chill Out To start

If you’re giving something away, people might try to defraud you.


You might think you’re immune, but you’re not. For example, Dropbox just gives free space — it’s not like you can cash that out for some hard disks.

Fraudsters literally sell the ability to saturate your account with referrals. You pay them (instead of Dropbox) and share your Dropbox referral code, and then you get referral bonuses from their fake signups.

This can be a big deal, but for new programs, my best advice is to just chill out. It’s premature optimization to build a lot of infrastructure around fighting abusers before you know the channel even matters. This matches how security work is done anyway: you constantly need to adapt to the new attack patterns.

If you’re really worried about this, optimize your program on a subset of all your users and see if the numbers work at all. Make sure to normalize performance based on the size of the roll out. You won’t grow as fast, but you can stay in control. I think this is a bad idea, but go for it if you’re very concerned about fraud.

#29 Fraud: Increase Reward Costs

One of the easiest ways to fight fraud is increasing the threshold for granting a referral bonus.

For Dropbox, only users that installed a desktop client and sync-ed a file were counted. Some ingenious fraudsters found a way to mass produce desktop environments on AWS, so a lot more controls were put in place since that basic start.

But the pattern is a good one to copy. In Dropbox’s case, the activation of a signup was required, not just the signup. This is great for your app because you’re biasing towards getting better users. You can even involve your inviters to the game. If there is just one more thing the invitee needs to do, tell the inviter to tell their friend to do it.

#30 Fraud: Watch Cannibalization

Would your referral signups have signed up anyway?

That turns out to be a hard question to answer. In some cases it might be that a friend is with a user, and before the friend signs up, the user asks to use the referral program. Imagine two people waiting for a cab, and one tells the other to get the Uber app.

Measuring how often this happens is hard because it involves in person meetings and communication outside of your app.

One rigorous way to do it is to not send the actual invites to a test group. The percentage of people that still signed up could approximate your cannibalization rate. In my experience, it is a small concern, and not one to even bother measuring like this.

Even if it were cannibalized, you should consider relative acquisition costs. Not the cost per user but the cost compared to other acquisition channels.

One common error people make is including a prominent “coupon code” field on a checkout form. The first thing that I do when I see that field is google it to find a code, increasing cannibalization. Instead, just ensure that the links shared include the code, and make the coupon code field a hidden part of the form.

#31 Marketplace Dynamics: Supply → Demand → Supply

Marketplaces where the demand and supply side can be the same people are great for referrals.

Think of services like Kickstarter or Airbnb. On Airbnb, a user can be a guest, have a great experience, then decide to be a host. If someone invites a new user to be a guest, they can eventually help both sides of the platform.

Airbnb has baked this into the program by having referral bonuses change for guest vs host. But the flow isn’t different, it’s literally the same web page.

Other apps like Uber are more one-sided without as much transfer in their marketplace from demand to supply, and so their bonuses are very lopsided and their flows totally separate.

At the very least, you should measure this effect to see how many invitees eventually cross over.

The good news from an engineering perspective is that the mechanism to have one user send an invite to another is shared regardless of whether the flows are unified. These features can be re-used to great effect, especially when you triage by cost/benefit. This is why we’re excited for YesGraph’s SDK on iOS, Javascript, and soon Android. By making the mechanism easier, more apps can have great flows for more features.

#32 Track others

The ideas in this post came from following a bunch of great companies and running experiments myself. You can do the same.

Look at how competitors and apps you love ask users to bring in new users. My camera roll on my phone is full of screenshots from the apps I try.

You should take these tactics for what they are, suggestions and shortcuts. Always ask what would be good for *your* users and *your* market.

We’re here to help. Subscribe to get updated posts on our blog here. 

If you got this far, and want even more, we’re launching a class about growth too!