merging in material that will be folded in
This commit is contained in:
105
SourceMaterial/growth/sales/billing.md
Normal file
105
SourceMaterial/growth/sales/billing.md
Normal file
@@ -0,0 +1,105 @@
|
||||
---
|
||||
title: Billing
|
||||
sidebar: Handbook
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
## Managing billing
|
||||
|
||||
This handbook section is sort of the operation manual for the billing engine. If you're looking for the technical details or need to troubleshoot something check out the relevant [tech docs](https://github.com/PostHog/posthog-cloud#additional-docs)
|
||||
|
||||
### Self-hosted
|
||||
For customers with special pricing (i.e. very large volumes or Enterprise & Supported plans), we need to manually set up the billing information on the system. This page contains instructions for setting up billing. Please note this page covers the process after an official PostHog quote has been approved by the customer. For information before this stage, please refer to the [Sales](/handbook/growth/sales/sales-operations) section of the handbook. Contrary to cloud plans, **all self-hosted _paid_ plans must be manually prepared today** (i.e. there's no self-serve option yet). To set up billing for self-hosted, please follow these instructions:
|
||||
|
||||
#### Pre-setup
|
||||
This process only needs to happen once.
|
||||
1. Download the Postman collection from [license][license].
|
||||
1. Open the collection & set up the required environment variables (per the instructions on the repo).
|
||||
1. To test that everything is working as expected go to the "List licenses" request and make sure you get a 200 status code.
|
||||
|
||||
#### Setting up a subscription
|
||||
1. Log in to the [Stripe dashboard](https://dashboard.stripe.com/customers) and go to customers.
|
||||
1. Tap on New and fill out the form. At minimum please provide the customer's email address. However, it's recommended to add as much information as possible to make ongoing maintenance easier. It is particularly recommended to add the customer's Hubspot ID in the metadata section with a `hubspot_record` key (you need to save the customer record first).
|
||||
1. Copy the customer ID from the Stripe dashboard (it starts with `cus_`).
|
||||
1. Open the Postman collection and go to the "Create license [all options]" request.
|
||||
1. If you don't have the price ID of the plan you can obtain it from the [products page](https://dashboard.stripe.com/products). Be sure to copy the **price ID, not the plan ID** (it should start with `price_`).
|
||||
1. On the body section, adjust the appropriate parameters (for details on the parameters check out the [license][license] repo),
|
||||
```json
|
||||
{
|
||||
"valid_until": "2021-06-01T00:00:00.000000Z", // Timestamp (UTC) of when the license should expire (this won't affect the ongoing subscription agreement)
|
||||
"plan": "enterprise",
|
||||
"client_name": "Company, Inc.",
|
||||
"client_contact": "John Doe",
|
||||
"billing_email": "customer@example.com",
|
||||
"stripe_customer_id": "cus_iwdnHIV5",
|
||||
"stripe_price_id": "price_1HIbh9QhdPP",
|
||||
"coupon_id": "qthElB", // Optional (ID coupon for special pricing)
|
||||
"trial_end": "2021-01-22T00:00:00.000000Z" // Timestamp (UTC) of when the trial should end
|
||||
}
|
||||
```
|
||||
1. After sending the request, make sure that Test Results show `(1/1)` (see below) and open the visualize tab. You should see a message like the one below with a link to set up billing. **Send that link to the customer** who can use it to enter their card details on their own.
|
||||
|
||||

|
||||
|
||||
1. Finally, go to the _pretty_ tab and you will see the license key for the user. You may share that key with the customer once they have activated their subscription. After [#10](https://github.com/PostHog/license/issues/10) when the activation process happens automatically, you may share the license key with the customer immediately.
|
||||
|
||||
#### Activate subscription
|
||||
|
||||
As a customer, to redeem a license key:
|
||||
1. Go to the license page in your PostHog instance. `<your url>/instance/licenses`.
|
||||
1. Enter the received license key in the input.
|
||||
1. Tap on activate license key and you are good to go.
|
||||
|
||||
|
||||
### Cloud billing
|
||||
Cloud billing may be set up using self-serve. For this, the new user just needs to go to the [organization billing](https://app.posthog.com/organization/billing) page and select one of the available plans (internally please note these plans must have both `is_active` and `self_serve` set to `True`). Billing can also be set up from account creation, by adding the `plan_key` as a query string parameter (e.g. `https://app.posthog.com/signup?plan=standard`), this is helpful for redirections from landing sites where a plan has already been selected.
|
||||
|
||||
|
||||
For PostHog Team: to set up a billing agreement, please follow these steps.
|
||||
1. Go to the [Django admin](https://app.posthog.com/admin/) and open the [Organization billing](https://app.posthog.com/admin/multi_tenancy/organizationbilling/) objects.
|
||||
2. Search for the relevant user (either by name, company name, email or Stripe IDs).
|
||||
3. Once you have the appropriate user, select the plan you want to assign to the organization.
|
||||
4. In addition to the plan, be sure to check the "Should setup billing" checkbox and click save.
|
||||
|
||||
After this the user will be prompted in their app to enter their card details to initiate the billing agreement.
|
||||
|
||||
If you need to activate a plan bypassing actual billing on Stripe (this should be extremely rare!), just set up a `billing_period_ends` that is after today's date (and be sure that "Should setup billing" is not checked).
|
||||
|
||||
|
||||
#### Non-profit organizations
|
||||
We offer 50% discount to non-profit companies (see [pricing](/pricing#non-profits)). The activation process is as follows:
|
||||
1. Non-profit company reaches out to PostHog, likely via email.
|
||||
1. On our end we validate the company is eligible for the discount.
|
||||
1. Validate the customer has signed up for the standard plan and completed the billing process. Easiest done in [Stripe dashboard][stripe_dashboard], look up the customer using the owner's email address. The Standard Plan subscription must be active **and** the customer must have a valid payment source on file.
|
||||
1. On the customer page click on Actions, and then _Apply coupon_. Select coupon "Non-profit organization discount" (ID: `NxipELS0`)
|
||||
1. Let the customer know via email.
|
||||
|
||||
|
||||
#### Startup & YC plans
|
||||
We offer [a deal](/handbook/growth/sales/yc-onboarding) for certain YC companies & other startups, while the details of this deal change periodically (and are documented in the main website and/or ops repo), here are the details on how to apply the plan for a company. Internally, these plans have special logic handling in the [posthog-cloud][posthog-cloud] repo. If our deal terms changes (current details detailed below), a new plan needs to be added. This custom logic is handled in `multi_tenancy/models.py#handle_post_card_validation`). Currently we only have one plan (`plan_key = startup`) which provides free billing for 1 year and a 20M monthly event allocation.
|
||||
|
||||
**How to apply it**
|
||||
- Follow the steps above (Go to Django admin, find the relevant customer, ...).
|
||||
- For the plan, you'll choose the custom startup plan, `plan_key = startup`. Be sure to check the `should_setup_billing` checkbox!
|
||||
- Let the customer know they need to enter their card information at the prompt (shown on every page of the app).
|
||||
- After they enter their card information successfully, the plan will be activated and the prompt will disappear. The plan will last for 365 days from the moment they confirm their card details.
|
||||
|
||||
**General structure & notes**
|
||||
- The way this plan works internally is that it creates a checkout session with `mode = setup` and with a card pre-authorization charge instead of a subscription agreement. This way, we validate the card is active and it gets saved on Stripe for future use. When we receive confirmation the charge has been processed and the card saved (via the `payment_intent.amount_capturable_updated` webhook), we do the custom logic handling to enable the plan for 365 days.
|
||||
- There's an issue, [posthog-cloud#92](https://github.com/PostHog/posthog-cloud/issues/92), with some details on tech debt / improvements to this flow.
|
||||
|
||||
|
||||
|
||||
#### Updating subscriptions
|
||||
This section provides instructions for a PostHog team member to change subscriptions for a existing customer (e.g. if they want to upgrade/downgrade, move from legacy plans to standard plans, etc.)
|
||||
1. Look up the customer on [Stripe dashboard][stripe_dashboard] using their email address or Stripe ID (this ID can be obtained from Django Admin too, under `OrganizationBilling` object).
|
||||
1. Click on the customer's current subscription.
|
||||
1. Click on _Update subscription_.
|
||||
1. Remove the old item from the pricing table and add the new item.
|
||||
1. Click on _Update subscription_. Do not schedule the update for a later time. There will be unintended side effects if the changes are not applied immediately.
|
||||
1. Find the corresponding `OrganizationBilling` on [Django Admin](https://app.posthog.com/admin/multi_tenancy/organizationbilling/). You can look up by the same email address.
|
||||
1. Update the **new billing plan and the new Stripe subscription item ID**. The subscription item ID starts with `si_` (not to be confused with a Subscription ID). This **ID will have changed**, the Subscription ID remains the same.
|
||||
|
||||
[license]: https://github.com/posthog/license
|
||||
[posthog-cloud]: https://github.com/posthog/posthog-cloud
|
||||
[stripe_dashboard]: https://dashboard.stripe.com/
|
73
SourceMaterial/growth/sales/demos.md
Normal file
73
SourceMaterial/growth/sales/demos.md
Normal file
@@ -0,0 +1,73 @@
|
||||
---
|
||||
title: Demos
|
||||
sidebar: Handbook
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
## Giving Great Demos
|
||||
|
||||
Always focus on delivering what the customer needs. Sometimes that will mean sending them to a competitor or turning them down.
|
||||
|
||||
### Initial Call
|
||||
|
||||
The purpose of this call is to work out what the potential customer needs.
|
||||
|
||||
Don’t be presumptive - ask why they reached out. It’s often a very quick way to understand what they need, but there will likely be adjacent challenges you can also uncover.
|
||||
|
||||
You are trying to work out:
|
||||
|
||||
- Does the client prefer ease over saving money or vice versa?
|
||||
- How should the client deploy (i.e. cloud or self-hosted with support). This will depend on their volume and price sensitivity.
|
||||
- Does our functionality meet their use case? Would it be worth going ahead with what we have now?
|
||||
- Is the client going to need us to do most of the work? If this is the case, support is really important e.g. because they’re growing very fast.
|
||||
- How much analytics experience does the client have? More experience means you should focus more on how we are different, less experience means you should try to keep things simple.
|
||||
|
||||
As a rule, always understand the context behind the question - it may help you make further useful recommendations.
|
||||
|
||||
### Demo
|
||||
|
||||
#### Environment
|
||||
|
||||
When doing a demo of PostHog, you should prioritize using the following environments:
|
||||
|
||||
1. The client's own instance or PostHog Cloud account (if they have one **and** are OK with this).
|
||||
|
||||
This is the best way to do a demo because you can help the client with their exact needs and you show them how to do what they want with their own data, so they immediately see the value.
|
||||
|
||||
2. The [PostHog Demo Environment](https://playground.posthog.com)
|
||||
|
||||
The demo instance was designed to be an environment with a significant amount of "good" demo data that showcases the multiple features of PostHog and allows clients to log in and run the demo themselves (while following your instructions).
|
||||
|
||||
To run a demo on the demo environment, you should:
|
||||
|
||||
1. **Have access:** Ask Yakko or James to give you access if you don't have it.
|
||||
2. **Invite the client to the instance:** Invite them to the instance so that they can have access themselves without you having to share credentials.
|
||||
3. **Guide the client through a demo while they share their screen:** Take them for a spin of the product as you would do if you were the one navigating. But be patient, the client might want to click around and get a feel for PostHog, which is encouraged!
|
||||
4. **Revoke their access at the end of the call:** After the call, revoke the client's access to the instance or ask Yakko to do it if you do not have permission.
|
||||
|
||||
3. A local environment
|
||||
|
||||
This is best if you have a good set of demo data locally. You can use some our management commands for data generation to do this.
|
||||
|
||||
4. PostHog Cloud
|
||||
|
||||
Only demo using PostHog Cloud (on the PostHog team account) if you really have to. Be careful not to expose sensitive data when doing the demo.
|
||||
|
||||
#### Guidance
|
||||
|
||||
Show the client the product. Pause frequently and make sure there are no questions. Ask if the functionality would help them.
|
||||
|
||||
Use this to confirm the benefits to the customer that PostHog needs to provide. If you are talking only about feature X does Y, then you’re doing it wrong. "As a Product Manager, I may want to know 'X' about my users, this is how you do that."
|
||||
|
||||
### Follow Up
|
||||
|
||||
Keep this as quick as possible - if you can follow up immediately / on the same day, do it.
|
||||
|
||||
### Feature Requests
|
||||
|
||||
Sometimes client calls will highlight features that they would need which we don’t have. Your first step is to work out if what we do will be valuable enough to move forward with. Avoid committing to new functionality unless you’re already about to work on it. It’s better to underpromise and overdeliver.
|
||||
|
||||
### Style
|
||||
|
||||
* Be passionate: "This is one of my favorite parts of the system", "the neat thing about X is Y"
|
||||
* Social Proof: If your current users are using something, or if you built something for a really specific reason, let the client know (obviously without naming names). This helps people know they're not the first to use PostHog!
|
125
SourceMaterial/growth/sales/sales-operations.md
Normal file
125
SourceMaterial/growth/sales/sales-operations.md
Normal file
@@ -0,0 +1,125 @@
|
||||
---
|
||||
title: Sales Operations
|
||||
sidebar: Handbook
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
## The Basics
|
||||
|
||||
We use [HubSpot](https://www.hubspot.com/) as our customer relationship management ('CRM') platform. If you need access, you can ask Charles or James H and they will send you an invite to create an account.
|
||||
|
||||
As a first step, it is _really important_ that you [connect your personal PostHog Gmail account](https://app.hubspot.com/crm-settings-email/6958578/email/connectedEmails), so that if you start a conversation in HubSpot but continue it in Gmail, we'll have a complete record. This will also make it generally easier for you to sync contacts with HubSpot.
|
||||
|
||||
You might also find it useful to install HubSpot's [Chrome extension](https://chrome.google.com/webstore/detail/hubspot-sales/oiiaigjnkhngdbnoookogelabohpglmd?hl=en), as it means you can manage most things directly in Gmail.
|
||||
|
||||
As a general principle, we try to ensure as much customer communication as possible is captured in HubSpot, rather than in individual email inboxes, so that we make sure our users are getting a great experience (and not confusing or duplicate messages from different team members!). You should use the channel that suits the user, not us. Just make sure you keep Hubspot up to date with your interactions. We've seen much higher response rates on Slack than email. You can copy paste from there into Hubspot until we have a way to integrate the two.
|
||||
|
||||
Hubspot is a comprehensive tool with a lot of functionality, so we are currently focused on using a few core features well. You are most likely to use the following regularly:
|
||||
|
||||
- _Contacts_ - pretty straightforward, under 'Contacts'. You can create contacts manually, or sync with your Gmail.
|
||||
- _Companies_ - also under 'Contacts'. You will also want to create a company record to associate with any contact (and you can associate multiple contacts with a single company). If you enter the company's domain name, HubSpot is pretty good at pulling in additional data to fill out the record.
|
||||
- _Inbox_ - this is under 'Conversations' and is where we deal with messages that come into our public-facing email addresses. New messages will come in as 'Unassigned' and then get assigned to someone.
|
||||
- _Deals_ - under 'Sales'. This is where we manage our customers who are interested in an Enterprise or Startup plan and is the core of our sales ops process.
|
||||
- _Tasks_ - also under 'Sales'. This is a useful place to see a summary of all the tasks that you have created or that have been assigned to you.
|
||||
|
||||
If you'd like to dig deeper, HubSpot have a ton of [documentation](https://knowledge.hubspot.com/) and resources that you can refer to as well.
|
||||
|
||||
## Managing our CRM
|
||||
|
||||
People currently come into HubSpot through one of 3 ways:
|
||||
- They email hey@posthog.com, sales@posthog.com or another email address if we have created a custom one for a specific group
|
||||
- They sign up to the PostHog app
|
||||
- They are manually added to HubSpot by a member of the team, e.g. if you met someone interested in PostHog at an event
|
||||
|
||||
### Email
|
||||
|
||||
New conversations come into 'Unassigned', whereas ongoing conversations will go straight to your inbox.
|
||||
|
||||
We do not have super defined roles here, but generally:
|
||||
- James H deals with Enterprise queries
|
||||
- Yakko takes care of Startup queries
|
||||
- Paolo focuses on existing customers
|
||||
- Charles oversees sales ops and HubSpot admin
|
||||
|
||||
However, anyone can and should jump in if they can help or they see someone hasn't been responded to, especially when folks are on holiday!
|
||||
|
||||
We have lots of handy templates you can use as well - just select _Templates_ in the email window in Hubspot. If you find yourself sending the same type of email repeatedly, you may want to create your own template - go to 'Conversations' -> 'Templates'.
|
||||
|
||||
If an inbound email is about one of our Startup or Enterprise plans, you should create a Deal - more on this below.
|
||||
|
||||
In addition to hey@posthog.com and sales@posthog.com, we sometimes create special one-off email addresses to use for specific groups, such as for an event or promotion. If you create a Google group and you want messages to flow into HubSpot to be managed, make sure you add our [HubSpot inbox email address](hello-1@posthoginc.hs-inbox.com) to your group as a member.
|
||||
|
||||
### New PostHog signups
|
||||
|
||||
All new users are automatically added via our Zapier app to the 'New PostHog User' stage of our Sales pipeline. Sorting these ensures that we can keep communication clear with a customer when they have multiple users on the account - it's really annoying for a customer if we are having parallel conversations with different people on their team!
|
||||
|
||||
More on how we manage these users in the Deals section below.
|
||||
|
||||
### Manually adding new users
|
||||
|
||||
You can also just manually add a user to HubSpot under 'Contacts'. When creating a new contact, try to add as much useful information as possible, especially about the type of company they work for and what their needs are. This enables us to provide them with the best possible experience.
|
||||
|
||||
Once you have created a contact, you may want to add them to a Deal, depending on the context.
|
||||
|
||||
Make sure you also assign someone as the Contact owner, so it's clear who is responsible for managing that relationship.
|
||||
|
||||
## Deals
|
||||
|
||||
We manage two pipelines for our deals - _Enterprise_ and _Startup_. This helps us stay organised, given the process is different for each.
|
||||
|
||||
Creating a Company with a Contact should be the _first_ thing you do when you are setting up a deal in HubSpot, if one does not exist already. It's then really easy to add a Deal from within a Company record.
|
||||
|
||||
Creating a new deal is quite intuitive, but here are a few tips:
|
||||
- Generally, try to fill out as much information as possible - this is useful for you, but also gives context to other people working with a customer
|
||||
- Make sure you assign your deal to the right pipeline
|
||||
- Every deal needs an owner - this is the customer's main point of contact at PostHog
|
||||
- Tag every deal by 'Deal Type' - use your judgement to determine which category makes sense
|
||||
- Put the deal in the right _Deal Stage_ - again, use your judgement! Usually this will be 'First Contact' or 'In Discussion'.
|
||||
|
||||
You can also easily add a customer to a deal directly from the Inbox as well - just select 'Create a Deal' in the right hand pane when you have their message selected.
|
||||
|
||||
### Managing the pipeline
|
||||
|
||||
We don't have a super detailed process on this yet. That being said, here are a few things to bear in mind:
|
||||
- Use private notes to tag relevant people for their attention, ask questions etc. Do this in HubSpot (not Slack) so everyone can stay on the same page. If you need to tag someone who doesn't have a HubSpot account, as Charles to add them.
|
||||
- Be clear, direct and open - see other deals for examples on tone. We are very opposed to the use of any kind of corporate language.
|
||||
- Be responsive!
|
||||
|
||||
Within a deal, you can also set Tasks such as a follow up reminder for yourself. We are working on automating these, but in the meantime you can manually create tasks really easily, e.g. 'Follow up in 3 days'. HubSpot will automatically notify you of your tasks due each day by email.
|
||||
|
||||
As a conversation progresses (or not) with a customer, you should move them into the relevant stage as appropriate.
|
||||
|
||||
### Quotes
|
||||
|
||||
Any Enterprise customers or Cloud customers wanting to capture over 500k events per month require a custom quote.
|
||||
|
||||
Our Enterprise pricing starts at $2,000 per month, but you will need to determine the appropriate pricing based on factors including:
|
||||
- What level of support they require, such as monitoring and/or updating their instance
|
||||
- Approximate user/event volume anticipated
|
||||
- Hosting requirements
|
||||
- Number of projects
|
||||
- Whether they have existing data to migrate
|
||||
- Any relevant deadlines
|
||||
|
||||
We provide a discount for annual upfront invoicing, typically 10%. We may also offer some sort of free trial if appropriate - 30 days is our standard.
|
||||
|
||||
We generate quotes directly within HubSpot - go to 'Sales' -> 'Quotes'.
|
||||
|
||||
The process is fairly straightforward for creating a quote. A couple of points to note:
|
||||
|
||||
- It is really important that you add our standard payment terms to the quote, so it is clear when the customer should expect to pay.
|
||||
- You can use 'Snippets' when building a quote to insert frequently used text (like payment terms).
|
||||
- Do not use the Stripe billing integration as it is very basic and does not enable you to have different types of line item (e.g. 1 month free trial and then an ongoing monthly subscription).
|
||||
|
||||
### Billing
|
||||
|
||||
Once a quote has been agreed with a customer, you should proceed to billing and generating a license key for them. See instructions on how to do this on the [Billing](/handbook/growth/billing) page.
|
||||
|
||||
## All done - now what?
|
||||
|
||||
This is just the beginning of what will hopefully be an awesome relationship with a new customer!
|
||||
|
||||
We are just getting started here, but a few things that you should do:
|
||||
- Make sure you invite the customer to our PostHog Users Slack!
|
||||
- If they are an Enterprise customer, they should also have a private Slack channel in there with us.
|
||||
- Set a couple of tasks in HubSpot to check in with them - depending on who they are you may want to check in after 1 week/month/quarter.
|
Reference in New Issue
Block a user