PostHog Handbook Library / Growth

3,443 words. Estimated reading time: 16 min.

# Managing contracts

Auto TL;DR

## At a Glance

This long page covers these main areas. The list is generated from the article headings, so it updates with every handbook rebuild.

1. Creating and managing contracts
2. Multi year deals and credit allocation
3. What about monthly customers?
4. QuoteHog pricing calculator
5. Order form
6. Creating an order form
7. Routing an order form for review and signature
8. Manual upload of signed order form

### Creating and managing contracts

For customers who want to sign up for an annual (or longer) plan there is some additional paperwork needed to capture their contractual commitment to a minimum term, and likely custom pricing as well. At a minimum, they should sign an Order Form which references our standard terms and privacy notice. In addition, they may want a custom Master Services Agreement (MSA) or Data Processing Agreement (DPA).

#### Multi-year deals and credit allocation

The credit term only extends beyond 12 months (e.g. to 24 months for a two-year deal) if the customer pays the full amount for the entire term upfront (e.g. the full two-year amount paid upfront). How the credits are allocated depends on how the customer pays:

- Paying all upfront for the full term: the customer gets the full credit amount added in bulk at the start, with an expiry set to the full length of the term (e.g. a two-year expiry for a two-year deal paid upfront).
- Paying per year (or in tranches): the extended term does not apply. Credits are granted in tranches allocated on each renewal date, each with a 12-month term. For example, a two-year deal split evenly grants half the credits in the first year and half on the renewal date at the start of the second.

#### What about monthly customers?

Anyone on a monthly plan simply agrees to our terms and privacy policy when they sign up.

### QuoteHog pricing calculator

While we offer transparent pricing available to all, you can use QuoteHog for customers who need a "formal quote," or who have very high volumes, or otherwise have bespoke needs.

Sign into QuoteHog via your PostHog Google account/SSO. Upon login, you will see a list of existing quotes, sorted by the created date. You can view a previously created quote or create a new quote using the "New Quote" button at the top right.

The quoting interface is intuitive and, of course, uses the same pricing we display publicly. Feel free to involve a customer in creating a quote if the opportunity presents itself and you think it would build trust.

> Be sure to always click the "Save" button after making changes to a quote. QuoteHog does not autosave.

Quotes can be shared externally or embedded in an external source. Clicking the Dot Menu from a Quote and click "Share". If someone asks for a PDF version of a quote, you can view the external version and print it to PDF.

QuoteHog also provides Stripe reported usage and spend for existing customers. To do this, you need to first connect QuoteHog to Salesforce from the profile page. As you build a quote, click "Add customer info" and search for your customer account. This also allows you to link the quote to an existing Salesforce opportunity.

When building a quote for an annual plan conversion or renewal, consider:

1. How is usage trending? Looking at the past 6 month's of usage (usage history tab in QuoteHog):

- If usage is trending up, calculate the growth rate and project expected volume for a year.
- If usage is stable, project based on the latest month's volume or the average or the maximum.

> Note: QuoteHog's input expects monthly volume, so after estimating annual volume, don't forget to convert it to monthly volume.

1. Is there opportunity to adopt additional products? How does that affect future usage?

1. Is the customer on a plan that expires partway through the term? Campaigns, beta plans, and promotional free tier increases all suppress usage today and step up on a known date, so their current spend is not their post-plan spend. See contracts for customers on time-limited plans.

You can create quotes with multiple options: e.g. one based on current usage, one with a higher tier to account for growth potential.

The legacy pricing calculator is available here.

### Order form

An order form is a lightweight document that captures the customer details, credit amount, discount, term, and signatures from both PostHog and the customer. They are either governed by our standard terms or a custom MSA (see below).

You will likely need to use QuoteHog to get the correct credit amount to be included in the order form.

#### Creating an order form

We use PandaDoc to handle document generation, routing and signature. Ask Mine Katsu or Simon Fisher for access if you don't have it.

1. The order form template to use is titled `[Client.Company] PostHog Cloud Order Form - <MMM YYYY>`
2. When looking at the template, click the link to Use this template in the top bar.
3. In the Add recipients box which pops up:
4. Replace `<MM YYYY>` with the month and year the contract starts (e.g. March 2023)
5. Add the Client email, first and last name
6. Add the PostHog Signer email - normally the team member who is responsible for the customer (AE or CSM).
7. Click continue
8. In the pricing table, set the total amount of credit in the Amount box next to PostHog Cloud Credit
9. Remove the Enterprise Plan line item if not needed.
10. At the bottom of the pricing table, set the Discount % just above the Total
11. On the right of the screen there is a sidebar, select the Variables tab and populate them as follows:

- Client Address Information - Needs to be their legal correspondence address (check with your customer contact)
- Client.Company - The legal company name
- Contract.Discount - The discount % (appears in the Additional credit purchase section)
- Startup credits - If the customer qualifies for the 2 free months when rolling off the startup plan, add up their total and discount as normal, and then add a note about the free credits in this format: "An additional credit in the amount of XXXXX (offered to customers in exchange for rolling off the Startup plan) to be applied to Customer's account upon signature with the same expiration date." For example, if a customer is signing a standard $20k annual contract to get the 20% discount, the total will be $25k, 20% discount of $5k, total cost to the customer would be $20k. In the notes, you would write: "An additional credit in the amount of USD $4,166.67 (offered to customers in exchange for rolling off the Startup plan) to be applied to Customer's account upon signature with the same expiration date."
- Contract buyout credits - If the customer is buying out a competitor contract, add the buyout credit to the Special Terms in this format: "Customer will receive a one-time and additional PostHog Cloud Credit of $XX,YYY (the "Contract Buyout Credit") to be applied against monthly usage expiring on the Credit Allocation Date." Any buyout is subject to team lead approval before it goes on an order form.
- Contract.EffectiveDate

- Set the start date of the contract in the format DD MMM YYYY (e.g., 01 Feb 2023). For a new customer, this would be the date they choose to start their subscription. For an existing customer, we have two options:
- Immediate Activation: If the customer wishes to start using the credits immediately, set the start date to the beginning of their current billing period. This backdating ensures that the credits are applied correctly to the current billing cycle.
- Next Billing Cycle: If the customer prefers to begin their annual plan at the start of their next billing cycle, set the start date accordingly. This option aligns the contract start date with the upcoming billing period.
- For example, let’s say it’s October 15 and you’re setting up an annual plan. You have a pay-as-you-go subscription that started on September 1, and the next billing date is November 1.
- If a customer wants to start using credits immediately for the October cycle, your contract start date should be October 1.
- If a customer wants to start using credits starting the next billing cycle, your contract start date should be November 1.
- If you set the start date correctly, our Zapier automation flow will create the invoices with correct dates so our revenue calculations are not affected from the transition.
- Do not backdate beyond the current billing period. You can only set the start date as far back as the beginning of the current, not-yet-invoiced billing period (Immediate Activation above). Never set it into a period we have already issued an invoice for. Doing so rewrites an issued invoice and breaks revenue recognition, which is not something we support.
- Renewals: Salesforce auto-populates the renewal opportunity with the anniversary date (the day the previous term ends), but don't assume that's the correct `Contract.EffectiveDate`. The same rule applies as above: the start date must match the beginning of the billing period the new credits need to cover. If the customer has run out of credits on their existing plan and there's an open billing period the renewal credits should cover, backdate the start date to the beginning of that period — which may be up to a month before the anniversary date — so the new credits map to that invoice. Only start the renewal on the anniversary date itself if the customer's existing credits carry them cleanly through to it. If the order form won't be signed before that period's invoice is issued, don't hold the backdated start date. Move the start date to the beginning of the next billing period instead, and tell the customer the new credits apply from then. See contract timing rules below, and timing your renewals with billing for how to avoid getting into this position.
- Note: Pay-as-you-go products are charged after the end of the period, while flat-rate subscriptions are charged at the beginning of the period. As a result the first two payments on a monthly schedule may occur within the same billing period as part of the transition. Make sure to send a note to the customer to ensure they're fully informed!
- Startup credits - If the customer qualifies for the 2 free months set the start date of the contract for 2 months in the future, to account for the two free months ahead of the contract.
- Campaigns and beta plans - Do not apply the startup rule above. These customers are already paying us — their plan makes usage cheaper, not free — so future-dating the term would leave them on undiscounted list pricing until it starts. Set the start date normally and size the credits for the point at which their plan expires instead. See contracts for customers on time-limited plans.

- Contract.Term - The term in months of the contract (12 months by default)

1. If they are paying monthly change:

- Payment Terms to `12 equal monthly payments from Contract start date`.
- Payment Method to `Credit Card`.

1. If an MSA is being used rather than the standard terms you will need to replace the following text:

> PostHog Cloud License Terms appearing at: https://www.posthog.com/terms and Privacy Policy appearing at: https://posthog.com/privacy (collectively the “Agreement”)

with either

> PostHog Cloud License Terms entered into by and between the Parties on or about the date hereof and Privacy Policy appearing at: https://posthog.com/privacy (collectively the “Agreement”).

or, if the Customer insists on including the exact date of the MSA to remove ambiguity,

> PostHog Cloud License Terms entered into by and between the Parties on or about [INSERT DATE OF EXECUTION OF MSA] and Privacy Policy appearing at: https://posthog.com/privacy (collectively the “Agreement”).

1. You should link the order form to the opportunity record in Salesforce using the `Contract Link` field in the "Opportunity Closure Details" so that we have a reference to the completed paperwork from our CRM.

#### Routing an order form for review and signature

1. When viewing the order form, check the recipients tab in the sidebar. The Client and PostHog roles should be filled in.
2. A signing order should also be set, with the Client signing first (so they can review it before we sign).
3. Ensure Document forwarding and Signature forwarding are set to on so that our Contact can re-assign the document if needed.
4. Click Send at the top of the document and add a message explaining the context of the order form.
5. Once the Client and then PostHog have signed it you should get an email to confirm completion.
6. Don't forget to link to an opportunity in Salesforce and mark the associated opportunity as Closed Won.
7. Zapier will automatically add a record in the Annual Plan Table with the PandaDoc Order Form ID.
8. Celebrate!

#### Manual upload of signed order form

We prefer to keep all signatures in PandaDoc, but sometimes clients may prefer to sign a PDF copy. One way to minimize this is to send contracts for initial review via PandaDoc when possible. It is ok to have multiple drafts in PandaDoc as long as we have the final signed copy in there as well. When a client signs an order form outside of PandaDoc, please follow these steps to complete the process:

1. If you have previously created a draft, find the document from the Documents page in PandaDoc (note: you cannot change the status from Home or inside a document).

- Select "Change Status" from the three-dot menu on the right.
- Upload the signed PDF of the document.
- Mark the status as completed.
- Check Audit Trail to make sure the signed version is uploaded correctly.
- Link to an opportunity in Salesforce and close the associated opportunity as Closed Won.

1. If no draft exists, upload the signed document directly ad a new document in PandaDoc.

- Mark the status as completed.
- Link to an opportunity in Salesforce and close the associated opportunity as Closed Won.

Once you the signed form in PandaDoc is marked as complete and the Salesforce opportunity status is set to Closed Won, the RevOps team will get a notification and handle setting up the subscription and invoicing. See the Billing page for steps on how the billing setup works for more information.

#### Using prepaid credits to cover an existing pay-as-you-go invoice

When a pay as you go customer wants to sign a prepaid contract and use their new credits to cover an invoice that is about to be issued, timing is important. Credits can only be applied cleanly to an invoice _before_ that invoice is finalized.

##### Flag insufficient credits before the invoice is issued

Monthly invoices are generated automatically at the end of each billing period. As the account owner, if you know a customer intends to purchase more credits to cover their current usage, you should check before the invoice issue date whether they will have enough credits on the account to cover it.

Credits added before billing period ends are applied automatically and the customer never has to pay the PAYG charge out of pocket. No further action needed here.

If they won't have enough credits to cover an invoice, and won't sign before the invoice issue date, you can ask the billing team to pause collection for a few days. Once the contract is signed and the credits are added, billing can release the invoice and the prepurchase credits will cover it. Flag this as early as possible. Billing can only pause an invoice that hasn't been issued yet.

##### Contract timing rules

For newly purchased credits to cover the intended invoice automatically, both of these must be true:

- Contract start date must match the first billing period the customer wants to cover. For an existing customer this usually means backdating the Contract.EffectiveDate to the start of the current billing period (see Immediate Activation above). If the start date doesn't line up with the period being covered, the credits won't map to that invoice.
- Contract must be signed before the period_end date of the invoice they want to cover. If it's signed after the period closes and the invoice has been issued, the automated flow can no longer apply the credits.
- You can only backdate to the start of the current, open billing period, never to a period that has already been invoiced.

### Master Services Agreement (MSA)

Occasionally, customers will want to sign an MSA instead of referencing our terms in an order form.

1. Download a fresh copy of the PostHog Cloud MSA as a Word Document (legal teams prefer this format) and share it with your Customer contact. Download it from Drive every time — never reuse a copy saved locally or one from a previous deal, as the template is revised regularly.
2. They may want to propose changes (also known as 'redlines'). Work with Hector or Fraser to get these agreed.
3. Create a new document in PandaDoc, you can choose to either import from Google Drive or upload from your local machine. This should be the clean, non-redlined document as agreed by both parties.
4. Change the name to be `PostHog Cloud MSA - CUSTOMER LEGAL NAME`.
5. Add the Client and your name and PostHog email as roles.
6. Add a Signature, Name and Title field for both PostHog and the Customer.
7. Check the signing order (Client, then PostHog normally).
8. Send for signature - so long as any proposed changes have been reviewed and approved by Hector or Fraser, you are free to sign on behalf of PostHog

Sometimes large customers will ask for changes to our MSA. We have a list of the kinds of changes we will/won't consider in a private repo in the company-internal sales contract changes directory that you can generally agree to without the Ops team reviewing. However, if you are ever in doubt, ask in `#legal` in Slack

### Business Associate Agreement (BAA)

We offer HIPAA Compliance on PostHog Cloud and as such health companies will require us to sign a Business Associate Agreement with them. As this means we take on increased financial risk in case of a breach we ask them as a minimum to subscribe to one of the platform packages which is a guaranteed monthly payment. A maximum of one BAA per organization will be signed. Under most circumstances, it should be the company that owns the org/pays us.

1. Ask the customer to subscribe to a platform package (as well as any other paid plans they wish to use). You can verify this in Vitally by ensuring that they are in the `Teams Plan` segment.
2. Create a new document from the PandaDoc template.
3. All you need to do it set the `Client.Company` variable and then send it to them for review and signature.
4. It has been pre-signed by Fraser and will automatically add today's date as the date of signature for PostHog.
5. You'll get a notification when everybody has signed it - we have automation in place to ensure that the `HIPAA BAA Signed Date` property on the customer's Salesforce Account record is updated.

> We only provide our default BAA for platform package subscribers - customization requires >$20k annual spend. The BAA only remains active for as long as the customer is subscribed to a platform package - if they unsubscribe, we send them a message that their BAA will become inactive at the end of the month in which they cancelled. Customers on a platform package trial are not eligible to sign a BAA. You'll need to convert their trial to a regular subscription first, before they can sign it. If the lead is not sure whether they will need a custom BAA and their usage wouldn't put them at $20k, then it is worth pushing them to get legal feedback by sending them our BAA before moving forward, else you risk spending a lot of time on an evaluation that ends up at $250/month.

### Non-disclosure Agreement (NDA)

In some cases, prospective or current customers require a mutual Non-disclosure Agreement (MNDA) in place before conversastion or product activity can proceed. Terms already specify Confidentiality and if there is still a situation where a documented agreement is requested this can be easily accommodated.

- Access PandaDoc and Create a New Document
- Use the current PostHog - NDA template, which is kept in Google Drive — pull it fresh rather than reusing a copy from a previous deal
- Add your desired contact as a recipient and follow the usual PandaDoc process
- When document is complete, it will be stored in the Document library and can also be attached to the Salesforce account for future reference

#### Trust center approvals

Requests that originate from the Trust Center automatically get sent an NDA in the request from SafeBase to PandaDoc. Once the document is fully signed, access will automatically be granted.

Canonical URL: https://posthog.com/handbook/growth/sales/contracts

GitHub source: contents/handbook/growth/sales/contracts.md

Content hash: `b0db39fc445ee08c`

Static reader notes

- `MDX_COMPONENT_STATIC_ADAPTER`: Adapted interactive MDX components for static reading: MM, MMM, PrivateLink, TeamMember.