# Quotient Quotient is an AI-native marketing platform and intelligent agent in one — built to plan and execute campaigns across email, social, blog, and events, without the fragmented tools you've outgrown. It combines a full-featured SaaS marketing platform (content authoring, distribution, lead storage, performance analytics) with a powerful AI agent that can operate the platform, access external tools, and manage brand knowledge and memories. Quotient gives small-to-mid-sized B2B companies — from seed to Series C — the output of a top-notch marketing agency at a fraction of the cost. Key capabilities: - AI agent that plans and executes full marketing campaigns end-to-end - Email marketing with custom domains, audience targeting, and CRM sync - Social media publishing across major platforms - Blog content creation and WordPress publishing - HubSpot integration for contact and list management - Brand memory so the agent learns your voice, audience, and past campaigns - SDK and MCP server for developers building on top of Quotient --- # Docs ## File Tree docs/ audience/ import-audience location people segments blog campaign email/ dns/ cloudflare-guide godaddy-guide namecheap-guide shopify-guide squarespace-guide email-status suppression unsubscribe variables/ conditional-components flow hubspot/ email-sync field-mappings lists objects setup troubleshooting mcp/ github-private-repos memory navigating plans-and-billing sdk/ analytics api-keys audience blog flow memory react slack social trust-security/ privacy subprocessors wordpress/ setup syncing troubleshooting working-with-ai ## Documentation -- Start of: /blog --- title: Writing a Blog description: Learn how to write and publish blogs using Quotient order: 5 --- Documentation Graphic Writing a blog is one of the best ways to attract interest in your brand and establish your business as a trusted leader in its space. More specifically, a blog serves several purposes within your marketing strategy: - **Organic SEO:** Thoughtful, SEO-optimized blogs can help your brand rank for high-intent keywords in search engines like Google. Note that this can also help your brand get noticed by AI assistants like ChatGPT. - **Thought Leadership:** An informative, high-quality blog establishes your brand as a thought leader in your industry. This helps establish your brand’s reputation and credibility, which is critical for selling your product. - **Content that Sells without Selling:** A blog can help educate customers and prospects about the importance of your solution. The goal of a blog is not necessarily to sell your product directly, but rather to educate and promote understanding of the problem your business is trying to solve. With Quotient, you can write and publish a blog from the same integrated platform you use to send email, plan events, and manage your brand. ## Core Concepts **Posts** A blog post is an individual article with a dedicated URL. Blog posts are written as **rich text**, which means you can apply basic formatting like bold/italics, headers, and lists, but more advanced formatting like fonts and text size are controlled in your publishing environment. **Authors and Tags** Each blog has one or more **authors** and can also optionally have **tags**. Authors are linked to Quotient users, so if you want someone to be listed as a blog author they must be a user in Quotient. Tags are simply for organizational purposes to help users navigate your blog. For example you might have separate tags for… - Company Updates - Product Updates - Industry Trends **SEO Metadata** Blogs also have additional metadata for SEO, such as… - **Meta Description:** A short summary that appears in search results and helps improve click-through rates - **Keywords:** Target keywords that help search engines understand your content's focus - **Thumbnail Image:** The featured image that appears when your blog is shared on social media - **Publish Date:** Helps search engines understand when content was published This information is not necessarily visible on the page, but it helps search engines better understand the content and signals that it's fresh and relevant. ## Writing with Quotient You can ask Quotient to write entire blogs for you, conduct research, or edit and proofread blogs you've written. Quotient has access to your Knowledge Store, which is crucial for creating on-brand, on-message content. It also reads campaign briefs, ensuring that blogs fit into larger marketing campaigns. Here are a few tips for getting the most out of Quotient when writing blogs: - Submit samples of your writing to add to your Knowledge Store. This will help Quotient get a sense of your unique writing voice and preferences. Similarly, it can be helpful to put together an Author Profile for common blog authors. - Give Quotient your rough notes or stream-of-consciousness voice messages and ask it to polish them up into a nicely formatted, professional blog post. - Writing with Quotient is an iterative, back-and-forth process. You can ask it to draft the first version of the post, and then you can select portions of the text that you want to tweak using the “Ask for Changes” feature. ## Publishing Your Blog Once you've written your blog, you have two options for publishing it to your website: 1. If you have a custom-built website using a framework like NextJS or Remix, you can use the Quotient Javascript SDK to fetch data from the blog and render it. 2. If you use Webflow, you can use our Webflow integration to sync blog posts from Quotient to Webflow’s CMS. In the near future, we will be adding additional integrations to other web platforms like Framer and WordPress as well. You can schedule your blog to publish at a specific date and time, or publish it immediately. You can also unpublish a blog after it has been published. ### Publishing Changes Once your blog moves to the __Published__ status, it will be visible on your site. However, you may often want to publish changes to an already-published blog. Changes you make to a published blog will **_not_** automatically sync to your website. To publish them, click the “Publish Changes” button in the upper right hand corner of the blog page. -- End of: /blog -- Start of: /campaign --- title: Planning Campaigns description: How to plan your campaign calendar with Quotient order: 4 --- Documentation Graphic Campaigns help you organize your marketing efforts around a central theme or goal. A **[campaign](/s/most-recent-business/campaigns)** in Quotient is a coordinated collection of tasks and deliverables that work together toward a common objective. Think of campaigns as the strategic umbrella that organizes your marketing work across different channels and timeframes. Grouping deliverables into campaigns is not a requirement in Quotient; you can still publish one-off blog posts or email broadcasts. But grouping things into campaigns helps ensure that your marketing has a consistent message, making it more effective. Here are some examples of campaigns: 1. **New Feature Announcement:** When announcing an important new feature or launching a new product, it's common to write blogs, send email broadcasts, or host webinars promoting the new feature. 2. **Events:** Campaigns are often built around marketing events. For example, if you are hosting a webinar, or if your company is attending an industry conference, you might want to do a lot of marketing around that event, e.g. sending emails to customers before and after the event. 3. **Thought Leadership:** A specific topic, such as a new regulation or technological breakthrough, might be trending in your industry. To capitalize on interest, you might want to publish a series of blogs explaining your company's perspective on it. ## Core Concepts ### Tasks Campaigns are organized as a series of tasks. Each task represents a specific piece of work that needs to be completed as part of the campaign. Tasks move through a workflow with four statuses: - **To-do** - Task has been created but work hasn't started yet - **In progress** - Task is actively being worked on - **In review** - Task is complete and awaiting review or approval - **Done** - Task is complete and approved Tasks can represent many different types of work: **Deliverable-Linked Tasks** - Work that's connected to creating specific marketing assets in Quotient: - Writing a blog post - Designing an email broadcast - Setting up a marketing event - Building an automated flow - Creating a social media post **Standalone Tasks** - Work that doesn't happen directly in Quotient: - Shooting a video - Taking screenshots of a new feature - Getting legal approval - Running paid ads - Coordinating with external vendors ### Deliverables When a task involves creating a marketing asset that will be distributed to your audience, it can be linked to a **deliverable**. Deliverables are the actual marketing assets created in Quotient: - **Blog Posts** - Articles published on your website - **Email Broadcasts** - Emails sent to your audience - **Marketing Events** - Webinars, conferences, or in-person events - **Flows** - Automated email sequences - **Social Posts** - Content for X, LinkedIn, Instagram, Facebook, and TikTok When you link a task to a deliverable (like "Write Q4 product announcement blog"), the task provides project management structure while the deliverable contains the actual content and publishing details. ### Briefs Briefs are strategic memos that explain the purpose, message, and audience for a campaign. This information is critical for aligning both humans and Quotient on the strategy of a campaign. Quotient reads the brief for a campaign when creating content to ensure that the content is consistent with the theme and message of the campaign. ### Task Owners Each task can have an **owner** - the human who's responsible for completing it. When you're the owner of a task, you'll get notifications about its progress as Quotient works on it, and you can track it on your personal task list. ## Planning Campaigns with Quotient Ask Quotient to help you develop campaigns from inception to execution. It can create the campaign, write the initial brief, break down the work into tasks, and pick the right timeframe. Once you've agreed on the concept, Quotient will work through each task, creating the deliverables (like blogs, emails, or social posts) in new threads. Here are some tips for getting the most out of Quotient when planning campaigns: - You can ask Quotient to help you come up with ideas for campaigns, or if you already have a clear idea for a campaign you can ask it to break it down into actionable tasks. - Ask Quotient to search the web and perform research, which is helpful for campaigns that have to do with current events or trending topics. - Every company runs campaigns differently. Some prefer many small campaigns with just a few tasks and deliverables, while others prefer large campaigns with dozens of tasks and deliverables over several months. Tell Quotient about your preferred workflow and ask it to "remember" it in the future. - If you're not happy with a campaign, tell Quotient what you'd like to change. It will update briefs and add or remove tasks until it looks right. Building campaigns is an iterative process and requires some back and forth. -- End of: /campaign -- Start of: /flow --- title: Automating Workflows description: Creating automated customer flows with Quotient. order: 8 --- Documentation Graphic Quotient allows you to automate common internal and external workflows throughout your marketing stack. You can easily put together automations such as… - Sending automated sequences of marketing emails based, like a welcome series or account activation - Sending highly personalized, AI generated emails tailored to each customer's recent activity and firmographics - Updating a prospect's lead score when they signal high intent to purchase, e.g. by performing specific actions on your site - Sending automated notifications to your team when a new customer signs up for your product or achieves a certain lead score Automations like these help you engage with customers with personalized content at the right time, and they can also help automate repetitive work for your team. ## Core Concepts **Flows** [Flows](/s/most-recent-business/flows) are automated sequences of actions orchestrated by the Quotient platform. You can create flows using the flow editor or by chatting with Quotient. Every flow starts with a **trigger** and then proceeds through a series of **steps** until it's finished. Flows can also optionally be scoped to a specific **segment** of people, which you can define dynamically in each flow. **Trigger** Triggers are events or schedules that initiate a flow. There are six different trigger types: 1. **Event Trigger:** Activates when a specific user action occurs (email subscribe, page view, add to cart, checkout complete). Responds to customer behavior. 2. **Schedule Trigger:** Runs at defined times and frequencies (daily, weekly, monthly). Used for recurring communications. 3. **Person Update Trigger:** Activates when a specific field in a customer profile changes. Can trigger on any change or only when matching a specific value. 4. **Person Created Trigger:** Activates when a new person record is added to Quotient. Used for initial contact sequences. 5. **Programmatic Trigger:** Activates via the Quotient API or SDK. Provides programmatic control over flow initiation. 6. **Marketing Event Trigger:** Activates when someone's participation status changes in a marketing event (webinar, conference). Tracks status changes like registered, attended, or no-show. **Steps** Once the trigger has been activated, the flow proceeds through a series of steps. There are seven different step types: 1. **Send Email:** Sends an email to the customer using a specified template. Can include dynamic variables for personalization. 2. **AI Email:** Uses artificial intelligence to dynamically decide whether to send an email and which template to use based on customer data and behavior. 3. **Delay:** Pauses the flow for a specified duration (minutes, hours, days, weeks, months). Controls timing between actions. 4. **Update Person:** Updates a field in the person's profile. Works with both standard fields and custom properties. 5. **Notify User:** Sends an internal notification to a team member. References users by USER-type fields on the person or company record. 6. **Update Lead Score:** Modifies the person's lead score using increment, decrement, or set operations. 7. **Send to CRM:** Sends person data to connected CRM systems (Attio, Salesforce, HubSpot). Configurable for different CRM object types. **Conditionals** Conditional steps create branching paths in your flow based on either profile data or random sampling. They evaluate a statement about a person and route them down one of two paths: the "if true" branch or the "if false" branch. Conditions can be based on: - Profile properties (location, preferences) - Behavioral history (pages viewed, purchases made) - Email engagement metrics - Random sampling (for A/B testing) Conditionals transform flows from linear sequences into adaptive journeys that respond to each person's unique attributes and behaviors, allowing for targeted messaging without creating separate flows for each scenario. ## Building Flows with Quotient Tell Quotient the business objective of your flow and it will help fill in the details, including creating any email templates or segments needed along the way. Here are some tips for getting the most out of Quotient when building flows: 1. If there are specific email templates you want to use in your flow, @ mention them so that Quotient knows to use them. 2. If you are using Quotient to automate workflows with your CRM, make sure to explain how your CRM is set up, e.g. any custom fields you use for lead qualification. ## Common Use Cases Flows are a versatile tool that can support a wide range of marketing automation needs. While most commonly used for customer communication, flows can also streamline internal processes and automate data management across your marketing stack. Let's walk through a few of the most common use cases for flows. ### Sending Email to Users The most common use case for flows is sending automated marketing emails to users. Whereas email broadcasts send a single blast email to many people all at once, flows allow for more personalized, timely messaging that reaches customers at specific moments in their buying journey. These flows typically leverage the **Send Email** step to deliver targeted messages, often combined with **Delay** steps to control timing and **Conditional** steps to create personalized paths based on customer behavior. Here are some examples: - **Welcome Series** - Automatically send a sequence of emails to new subscribers introducing your product or service, typically spaced over several days or weeks. Uses **Send Email** and **Delay** steps with an **Event** trigger for new subscribers. - **Customer Activation** - Guide new users through key features with timely, targeted emails based on their activity (or lack thereof) in your product. Combines **Send Email** steps with **Conditional** logic to check user activity. - **Customer Winback** - Re-engage inactive customers with personalized offers or content based on their previous purchase history and browsing behavior. Uses **Schedule** triggers with **Conditional** steps to identify inactive users. ### AI Personalized Email AI Personalized Email steps are an especially powerful feature of flows in Quotient. These steps allow you to use AI to predict the best email to send a user based on their recent behavior - plus the instructions you provide. This helps improve conversion rates and improve outreach to customers who may not have been addressed by more deterministic, logic-based flows. An AI Personalized Email step accepts two main parameters: **Instructions** - A single block of instructions you wish to provide the AI. You can give the AI whatever instructions you like here. For example: - "Send promotional emails only to users who have opened emails in the last 30 days" - "Prioritize product recommendations from categories the user has previously purchased" - "Avoid sending more than 2 emails per week to any user" **Available Templates** - A list of templates that the AI can choose from. The AI will only choose from a list of pre-approved templates for this particular flow. Based on these, the AI will choose whether to send a template at all and, if so, which template to send. It is common to use AI Personalized Email steps in conjunction with schedule triggers. For example you might have a flow that is triggered at 9:00 am every Monday for any users that have not opened an email in the past two weeks. In this flow you could instruct the AI to choose from a set of templates in an effort to re-engage the customer. ### Sending Data to the CRM CRM integration flows automate the synchronization of customer data between Quotient and your CRM system, ensuring your sales and customer success teams always have access to the most current and relevant information. These flows typically use the **Send to CRM** step to sync data with systems like Attio, Salesforce, and HubSpot, often combined with **Update Lead Score** and **Update Person** steps to track customer progression. Here are some examples: - **Lead Score Updates** - Automatically increment a prospect's lead score when they perform specific high-value actions like downloading resources or visiting pricing pages. Uses **Update Lead Score** steps with **Event** triggers for high-value actions. - **Deal Stage Progression** \- Move leads through your sales pipeline based on their behavior and engagement with your marketing materials. Uses **Conditional** steps to check engagement levels before **Send to CRM** steps. ### Notifying Your Team Quotient can also send notifications via email or Slack to your team when certain events happen. This is helpful for getting your team's attention when someone performs an action that your team should know about - e.g. a new signup or a cancellation. These flows use the **Notify User** step to send internal notifications to team members, often triggered by **Event** or **Person Update** triggers that signal important customer actions. - **New Account Alerts** - Notify relevant team members when a new customer signs up, including essential information about the customer's profile and initial activity. Uses **Notify User** steps with **Person Created** triggers. - **Lead Qualification Notifications** - Alert sales representatives when a prospect reaches a specified lead score threshold or performs high-intent actions. Combines **Notify User** steps with **Person Update** triggers monitoring lead score changes. - **Customer Milestone Notifications** - Keep customer success teams informed when accounts reach important usage milestones or when accounts show signs of churn risk. Uses **Conditional** steps to check milestone criteria before **Notify User** steps. -- End of: /flow -- Start of: /index --- title: Introduction description: Getting started with Quotient order: 0 --- Documentation Graphic ## What is Quotient? Quotient is an **AI demand marketing platform.** "Demand marketing refers to all the activities that attract customers to your business, such as… - Writing online content like blogs or social media posts - Sending emails to customers or prospects - Hosting in-person or online events like webinars and trade shows - Building an authoritative brand that customers recognize and trust With Quotient, you can do all of this from a single integrated platform \- write blogs and emails, plan campaigns and events, and manage your brand information, all powered by AI. ## Working with Quotient You can chat with Quotient to get things done, just like you would with a coworker. If you've used products like ChatGPT or Claude, the experience will feel familiar. Simply tell Quotient what you want, and it takes care of the rest. Quotient understands your brand and learns your business's preferences and workflows over time through [memory](/docs/memory). You can ask it to do virtually any marketing task on the platform, from writing blog posts and composing emails to planning campaigns, building customer segments, and creating automated workflows. ## Quotient's Interface Quotient's interface has two main parts: 1. The **app panel** \- a traditional graphical user interface where you can manage campaigns, write blogs, compose emails, etc. 2. The **chat panel** \- a conversational interface on the right side of the app panel where you can chat with Quotient. As a general rule, everything that you can do in the app panel you can _also_ do by asking Quotient in the chat panel, and vice versa. When you chat with Quotient, it understands what page you're on in the app panel and can "see" what you're looking at. This makes it easy to collaborate side by side, much like you would with a human coworker. ## Next Up ## For AI Agents Every page in these docs is available as raw Markdown — just append `.md` to any URL (for example, `/docs/working-with-ai.md`). -- End of: /index -- Start of: /memory --- title: Memory description: How Quotient learns about your brand, preferences, and workflows order: 3 --- Documentation Graphic To do great marketing, Quotient needs context about your business — the same kind of context you'd give a new hire before they could do useful work. **[Memory](/s/most-recent-business/memory)** is where that context lives. Memory is a collection of documents that Quotient draws on whenever it writes content, proposes campaigns, or gives strategic advice. The more you teach Quotient about your business, the more relevant and on-brand its output becomes. This isn't so different from a human marketing agency. To do good work, an agency spends time learning your brand, your customers, and how you like to operate. The same goes for Quotient — except instead of onboarding calls and brand decks, the knowledge lives in memory, and Quotient can draw on all of it instantly. ## What Goes in Memory Memory is broader than just brand information. It captures anything that helps Quotient do better marketing for your business. Most memories fall into three categories. **Brand fundamentals.** Who you are, what you sell, who you sell to, and how you talk about it. Think product overviews, ideal customer profiles, competitive positioning, and brand voice guidelines. This is typically the first thing you'll build when you get started with Quotient. **Workflows and playbooks.** How your team actually gets marketing done. If you have a specific process for running product launches, publishing a weekly changelog, or planning quarterly campaigns, you can capture that in a memory document. When you later ask Quotient to kick off a product launch, it already knows what deliverables to produce, what the campaign structure should look like, and which channels to use — because your playbook told it so. **Preferences.** Individual or team-level preferences about how work should be done. For example, you might create a memory that describes how a specific team member likes to write social media posts — their preferred tone, length, and formatting. Quotient is often smart enough to create these on your behalf. If you say something like "going forward, I want my blog posts to always include a summary at the top," Quotient will save that as a memory automatically. ## Common Memory Documents Here are examples of documents that most businesses should have: - **Ideal Customer Profile (ICP):** Your target customers — demographics, pain points, decision-making process, and what drives them to your solution. Helps Quotient create more targeted content. - **Competitors and Battle Cards:** Profiles of your main competitors — positioning, pricing, strengths, weaknesses, and key differentiators. Enables Quotient to highlight your unique advantages. - **Product Overview:** Core functionality, key features, integrations, and what makes your product different. Ensures Quotient accurately represents your capabilities. - **Value Proposition:** Your main benefits and supporting pillars — the core reasons customers choose you. Gives Quotient consistent messaging frameworks. - **Brand Voice and Style Guide:** Your brand personality, tone, writing preferences, and communication style, with examples of on-brand vs. off-brand copy. - **Customer Success Stories:** Case studies, testimonials, and key metrics. Gives Quotient concrete proof points to draw on. - **Messaging Framework:** Tested headlines, taglines, content themes, and words or phrases to avoid. - **Campaign Playbooks:** Step-by-step workflows for recurring campaigns — a product launch playbook, a webinar planning checklist, or a process for assembling weekly newsletters. These help Quotient follow your team's established process rather than improvising from scratch. ## Pinned Memories Not all memories are surfaced to Quotient at all times. When you ask Quotient to do something, the system identifies which memories are most relevant to the task at hand and pulls them in automatically. This keeps the agent focused and avoids overwhelming it with context that isn't useful for the current job. **Pinned memories** override this behavior. When you pin a memory, it is always visible to Quotient — regardless of the task. This is useful for foundational context that the agent needs in every interaction, not just specific ones. Good candidates for pinning: - **Brand Voice and Style Guide** — so every piece of content stays on-brand - **Value Proposition** — so Quotient always knows how to position your product - **Key Preferences** — company-wide rules like "never use the word 'synergy'" or "always link to the pricing page in bottom-of-funnel content" You can pin or unpin a memory at any time from the memory detail page. Pinned memories are marked with a pin icon in the memory list so you can see at a glance which ones are always active. Pin sparingly — if everything is pinned, the benefit is lost. Memories that are only relevant to specific channels or tasks (like an email-specific style guide or a single campaign playbook) are better left unpinned. Quotient's relevance system will still surface them when they're needed. Reserve pinning for the handful of documents that truly represent your business fundamentals. ## Tags Tags help you organize memories by area or by author, so that Quotient can more easily identify which memories are relevant to each task. There are two types of tags: **platform tags** and **user tags**. ### Platform Tags Platform tags correspond to a platform area or topic. They help Quotient understand which memories apply to which kind of work. When Quotient is working on a task tied to a specific area, it will prioritize memories with matching tags — so the right guidelines show up at the right time without you having to think about it. The available platform tags are: | Tag | Use it for | |---|---| | **email** | Email campaign preferences — subject line style, send cadence, CTA placement | | **blog** | Blog writing guidelines — structure, length, formatting conventions | | **social** | Social media preferences — tone, hashtags, platform-specific conventions | | **tone** | General voice and tone guidelines that apply across channels | | **audience** | Target audience definitions and segmentation context | | **brand** | Core brand identity — positioning, messaging, visual guidelines | | **competitors** | Competitive intelligence — battle cards, positioning against alternatives | | **products** | Product details — features, use cases, pricing context | **Example:** You create a memory called "Email Best Practices" that describes your preferred subject line style, send cadence, and CTA placement. You tag it with **email**. Now, whenever Quotient drafts an email campaign, this memory is automatically prioritized — but it won't clutter the context when Quotient is writing a blog post. ### User Tags User tags correspond to a specific user or author in Quotient. These are useful when different team members have different preferences or responsibilities. **Example:** Your teammate Sarah prefers a conversational, first-person tone in her blog posts, while your teammate James writes in a more formal, third-person style. You create separate "Writing Preferences" memories for each and tag them with **Sarah** and **James** respectively. When Sarah asks Quotient to draft a post, her preferences are applied automatically — and the same for James. ### Combining Tags You can apply multiple tags to a single memory. By combining platform and user tags, you can build a memory system that gives Quotient the right context for the right person on the right channel — without anyone having to specify it at task time. For example, a memory tagged with both **Sarah** and **social** would contain Sarah's specific preferences for social posts, and would be surfaced when Sarah asks Quotient to draft something for LinkedIn — but not when James does, and not when Sarah asks for help with an email. ## Building Your Memory Building memory is not a one-time activity — it evolves alongside your business. As your product, positioning, and strategy change, your memory should too. Here are the most common ways to get started: 1. **Ask Quotient to interview you.** This is often the best starting point. Ask Quotient to conduct an interview about your brand, and it will ask the right questions to help you articulate your ICP, value proposition, competitive positioning, and more. It's a great way to get knowledge that's locked in your head down on paper. 2. **Share your website.** Tell Quotient which URLs to look at, and it will visit your site, read about your product and company, and use what it finds to bootstrap your memory. (Note that Quotient can only access public URLs.) 3. **Upload documents.** If you have PDFs, Word documents, or slide decks about your brand, upload them to chat and ask Quotient to synthesize them into memory documents. Copy and paste works too. 4. **Ask Quotient to research.** Tell Quotient to search the web on your behalf. A common use case is researching competitors and building battle cards that assess your strengths and weaknesses relative to each one. 5. **Connect external tools.** Useful context often lives in other systems — product briefs in Notion, feature specs in Linear, messaging docs in Google Drive. You can use [MCP connections](/docs/mcp-connections) to give Quotient access to these tools, making it easy to pull relevant context into memory. Think of memory as a living wiki for your business — the single source of truth for everything Quotient needs to know to do great work. -- End of: /memory -- Start of: /navigating --- title: Navigating Quotient description: How to get around the platform order: 2 --- Documentation Graphic Quotient's dual-panel interface (chat panel + app panel) packs a lot of power into one screen, but it can feel a bit overwhelming at first. Here are some quick shortcuts and pro tips to help you navigate the platform like a pro. ## Cmd + K If you need help finding something, you can use `⌘ + K` to open the command palette. In the command palette, you can search for objects such as email broadcasts, flows, and assets, and you can also access common shortcuts. ## Moving the Chat Panel Some people like the chat panel on the left. Others like it on the right. Sometimes, you might not want to see it at all. Fortunately, Quotient lets you move the chat panel wherever you want. - **Resize it:** Drag the divider between panels - **Hide it:** Click the "X" icon or press `Ctrl + \` - **Move sides:** Click your avatar → Display, or use `Ctrl + [` / `Ctrl + ]` ## Collapsible Sidebar To create extra space, collapse the left navigation sidebar by either clicking the icon in the top left corner or pressing `Cmd + .`. ## @ Mentioning When chatting with Quotient, quickly reference existing objects by @ mentioning them: This automatically shares all relevant context with Quotient—like sending a hyperlink to a human colleague. -- End of: /navigating -- Start of: /plans-and-billing --- title: Plans and Billing description: How Quotient's plans, usage, billing, and trials work order: 1050 --- Quotient offers four plans — **Free**, **Starter**, **Pro**, and **Scale** — each designed for a different stage of your marketing operation. For a side-by-side comparison of what's included in each plan, visit the [pricing page](https://www.getquotient.ai/pricing). This document covers the details of how billing, usage, and plan changes actually work once you're up and running. ## AI Credits AI credits are the unit of measurement for work that Quotient's AI does on your behalf. Every time Quotient writes a blog draft, composes an email, researches a competitor, or answers a question in chat, it consumes AI credits. Not all tasks consume credits equally. A few factors affect how many credits a given interaction uses: - **Conversation length.** Longer threads with more back-and-forth consume more credits than short, focused requests, because Quotient re-reads the full conversation each time it responds. - **AI model.** Premium AI models (available on Starter and above) are more capable but consume more credits per interaction than the standard models available on the Free plan. - **Task complexity.** Tasks that require Quotient to use tools — like searching the web, looking up audience data, or reading multiple documents — consume more credits than simple conversational responses, because each tool use involves additional processing. - **Content length.** Generating a 2,000-word blog post consumes more credits than writing a short social media caption. You can monitor your credit usage at any time in [Settings > Usage](/s/most-recent-business/settings/usage), which shows a breakdown of consumption within your current billing cycle. ## Usage and Overages Each plan includes a monthly allotment of AI credits, emails sent, social posts published, and blog posts published. How overages are handled depends on your plan: **Free plan.** When you reach your included allotment, usage is cut off until the next billing cycle. There are no overage charges — but you won't be able to use the feature until your usage resets. **Paid plans (Starter, Pro, Scale).** You're never cut off. If you exceed your included allotment, you can keep using the platform and the overage is added to your next invoice. This means your monthly bill may vary slightly depending on usage, though most users stay within their included allotments. Your usage resets at the start of each billing cycle, which is anchored to the date you first subscribed — not the first of the month. ## Resources and Feature Access In addition to usage-based metrics, each plan includes a set number of **resources** (users and connected social accounts) and access to certain **features** (email sending, social publishing, CRM integrations, Slack, custom email domains, and premium AI models). Resource limits are hard caps — if your plan includes 15 users, you'll need to upgrade before inviting a sixteenth. Feature access is binary: either your plan includes it or it doesn't. You can see exactly what's included on each plan on the [pricing page](https://www.getquotient.ai/pricing). ## Free Trial Every new Quotient business starts with a **14-day free trial of the Pro plan**. During the trial, you have full access to all Pro features — CRM integrations, Slack, custom email domains, premium AI models, and the full Pro usage allotment — without entering a credit card. When the trial ends, your business reverts to the Free plan. Any content you created during the trial (published blogs, sent emails, etc.) remains intact, but you'll lose access to Pro-only features until you subscribe. If you subscribe to any paid plan during or after the trial, the trial ends and your new plan takes effect immediately. ## Upgrading and Downgrading You can change your plan at any time from [Settings > Plan](/s/most-recent-business/settings/plan). **Upgrading.** When you upgrade to a higher plan, the change takes effect immediately. You're charged a prorated amount for the remainder of the current billing cycle — so if you upgrade halfway through the month, you only pay half the price difference. **Downgrading.** When you downgrade, you keep access to your current plan's features through the end of your billing cycle. The lower plan takes effect when the next cycle begins. If the lower plan doesn't include features you were using (like Slack or CRM integrations), those integrations will be deactivated at that point. ## Cancellation You can cancel your subscription at any time from [Settings > Plan](/s/most-recent-business/settings/plan). When you cancel: - Your subscription remains active through the end of the current billing cycle. You won't be charged again. - After the billing period ends, your business reverts to the Free plan. - All of your data, content, and settings are preserved — nothing is deleted. You just lose access to paid features. If you change your mind before the billing period ends, you can undo the cancellation and stay on your current plan. ## Payment Issues If a payment fails (for example, due to an expired credit card), Quotient will continue to retry the charge for a short period. During this time, your access is unaffected — you'll see a banner prompting you to update your payment method, but nothing is locked. If the payment remains unresolved after the retry period, your account's paid features will be restricted until the balance is settled. You can update your payment method at any time through [Settings > Plan](/s/most-recent-business/settings/plan) by clicking "Manage billing." ## Deleting a Business If you delete a business from Quotient, any active subscription is cancelled immediately — not at the end of the billing cycle. This is permanent. If you think you might come back, consider cancelling your subscription instead, which preserves your data on the Free plan. ## Overage Rates For reference, here are the current overage rates for paid plans. These apply only to usage beyond what's included in your plan:
Metric Overage Rate
AI Credits $26 per 1,000 credits
Emails Sent $1.50 per 1,000 emails
Social Posts Published $0.10 per post
Blog Posts Published $0.10 per post
Overages are calculated automatically and added to your next invoice. You can estimate your monthly cost using the [pricing calculator](https://www.getquotient.ai/pricing). -- End of: /plans-and-billing -- Start of: /slack --- title: Slack Integration description: Connect Slack to receive notifications and interact with Quotient directly from your workspace order: 700 --- Documentation Graphic Quotient's Slack integration lets you receive notifications and interact with Quotient directly from your Slack workspace. There are two main capabilities: 1. **Notifications** — Receive updates about your marketing activities directly in Slack 2. **Talking to Quotient** — Chat with Quotient without leaving Slack ## Getting Started To enable the Slack integration, navigate to **[Integrations > Slack](/s/most-recent-business/integrations)** in Quotient and click **Connect to Slack**. You'll be prompted to authorize Quotient to access your Slack workspace. Once connected, you can start receiving notifications and chatting with Quotient immediately. ## Notifications Quotient can send you notifications about important events—like when it completes a task or needs your input—directly to Slack. These notifications arrive as direct messages from the Quotient bot, keeping your channels clutter-free while ensuring you never miss an important update. ### Configuring Notification Preferences You can customize which notifications you receive in Slack from your notification preferences. Navigate to **[Settings > Notifications](/s/most-recent-business/preferences?tab=notifications)** to control exactly what types of updates Quotient sends you. For each notification type, you can choose: - **Immediate** — Receive the notification in Slack right away - **None** — Don't send this notification type to Slack (you may still receive it via email) ## Talking to Quotient in Slack You can interact with Quotient directly from any Slack channel or direct message—just mention **@Quotient** and start chatting. ### How It Works When you mention @Quotient in Slack, here's what happens: 1. **Quotient processes your request** — Your message is sent to Quotient, which works on your request 2. **A thread is created in Quotient** — The conversation becomes a thread in Quotient that you can view anytime 3. **You get a response in Slack** — Once processing is complete, Quotient replies in the same Slack thread with a summary of what was accomplished The entire conversation—including all the work Quotient did—is visible in the Quotient app. Just click the "View in Quotient" link in the response to see the full thread. ![Slack Integration](/screenshots/slack-integration.png) ### Using Conversation Context When you mention @Quotient mid-thread, it can see the full conversation history leading up to your message. This means you can discuss ideas with colleagues first, then bring Quotient in to execute. For example:
Marc

I have an idea for a new campaign. We should target our enterprise customers with content about our new analytics features.

Alex

Love it. Let's do a blog post and some LinkedIn posts from our company page.

Marc

Perfect.{" "} @Quotient{" "} make it happen!

Quotient
Quotient{" "} APP

Done! I've created a campaign called "Enterprise Analytics Launch" with:

  • Blog post: "5 Ways Advanced Analytics Transforms Enterprise Marketing"
  • LinkedIn post from Company page
  • LinkedIn post from Marc's profile
View in Quotient →
Because Quotient can see the entire conversation, it understands exactly what you're asking for without you having to repeat the context. ### Continuing the Conversation If you need to make changes or ask follow-up questions, just reply in the same Slack thread and mention @Quotient again. Your follow-up will be added to the same Quotient thread, preserving the full context of your conversation. ### File Attachments You can attach files to your messages when chatting with Quotient in Slack. Any file type that Quotient supports—such as images, PDFs, and documents—will be processed. Unsupported file types are simply ignored. ### Tips for Getting the Most Out of Slack Here are a few tips to help you work effectively with Quotient in Slack: - **Be specific in your requests.** The more context you provide, the better Quotient can help. Instead of "create a campaign," try "create a campaign for our product launch next month targeting enterprise customers." - **Use threads for context.** When you mention @Quotient in an existing thread, it can see the full conversation history. Use this to your advantage by discussing ideas with your team first, then bringing Quotient in to execute. - **One request at a time.** Like most AI applications, Quotient processes one message at a time. If you send a follow-up while Quotient is still working on your previous request, it may ask you to wait until it's finished. - **Check the full thread in Quotient.** The response you see in Slack is a summary. For the full details of what Quotient did—including any drafts it created—click through to view the thread in Quotient. ## Troubleshooting ### Quotient isn't responding to my @mention Make sure Quotient has been added to the channel where you're trying to mention it. In private channels, you may need to invite Quotient first using `/invite @Quotient`. ### I'm not receiving notifications in Slack Check your notification preferences in **[Settings > Notifications](/s/most-recent-business/preferences)** to ensure Slack notifications are enabled for the notification types you want to receive. Also verify that your Slack integration is still connected in **[Integrations > Slack](/s/most-recent-business/integrations)**. ### My file attachment wasn't processed Quotient only processes supported file types. If your file wasn't processed, it may be an unsupported format. Try converting it to a common format like PDF or PNG. -- End of: /slack -- Start of: /working-with-ai --- title: Working with AI description: How to get the most out of chatting with Quotient order: 1 --- Documentation Graphic You can chat with Quotient in plain English, just like you would with a coworker. Tell it what you want, and it will help you get it done. If you've used products like ChatGPT or Claude, the experience will feel familiar. However, working with AI is different from working with a human in a few key ways. The most important concept to understand is **context.** ## Context and Tools "Context" refers to the information that is available to Quotient. Unlike humans, Quotient starts each conversation fresh - it doesn't remember what you told it yesterday. It has to be explicitly provided with the information it needs to do its job. This means you should be explicit about what you want and provide all necessary context in each conversation. Knowing what context Quotient has and doesn't have will help you interact with it more effectively. When you talk to Quotient, its context will automatically include… - Information about your brand stored in the Knowledge Store - The conversation history within that chat thread - An understanding of the Quotient platform itself - Specialized knowledge relevant to the task at hand (e.g. when writing a blog, Quotient draws on expertise in SEO-optimized content) However, Quotient's context does _not_ include... - Knowledge of current events, like today's front page news or what's currently trending in your industry - Any information about your brand or business that is not reflected in the Knowledge Store - Memory of past interactions with you (if you tell Quotient about a new product feature in one conversation, it won't remember that information in future conversations unless you add it to the Knowledge Store) To get additional information, Quotient can use **tools** to look things up. Tools allow Quotient to interact with the outside world, including the Quotient platform, the open internet, and other integrated systems. Quotient can use tools to find information to add to its existing context, such as… - Searching the web and visiting web pages - Looking up a person or company from your Quotient audience - Looking up all currently active campaigns in Quotient In addition to looking up information, tools can also perform actions, such as… - Creating a new campaign - Editing a blog - Deleting an email broadcast ## @ Mentioning Objects You can @ mention **objects** in Quotient, such as Campaigns, Email Broadcasts, Blogs, Segments, and Email Templates. Mentioning objects will automatically include all of the data about that object into Quotient's context. You can think of this like sharing a URL with a coworker. Your coworker can click into the URL, give it a quick read, and understand what you're talking about. But without the URL, they might be confused and not understand the context. Here are some examples of when you might @ mention an object: - If you're asking Quotient to use a specific email template as part of a flow - If you're asking Quotient to send an email to a specific segment - If you want Quotient to use a specific asset as the thumbnail image for a blog ## Managing Threads Each conversation in Quotient is called a "thread". Within a given thread, Quotient will recall the entire conversation history, but it won't recall conversations from _other_ threads. When a thread gets too large or covers too many topics, it tends to confuse or overwhelm the AI. Long threads can be overwhelming for humans too. (No one likes looking at a Slack thread with 150 responses, or an email chain that's 80 replies long.) To get the best performance out of Quotient, it's best to keep threads scoped to a single task or set of related tasks. A good rule of thumb is to create one thread per **deliverable** \- i.e. a single thread for each blog, campaign, email broadcast, etc. Sometimes it makes sense to group related deliverables into a single thread. For example, you might be working on a blog post as well as an email broadcast announcing the new post to your subscribers. In this case, it might make sense to create both deliverables in the same thread. On the other hand, if you have a completely new, unrelated request, it's best to start a fresh thread to begin working on it. ## Memories Although Quotient doesn't naturally remember past interactions the way humans do, it is able to record **[memories](/s/most-recent-business/memory)** which will be stored as context for future interactions. This is a helpful way for Quotient to learn your business's particular preferences and workflows. If you want Quotient to remember something for future interactions, just tell it to "please remember this going forward". Common examples of memories include… - Which email templates should be used as a starting point when creating new broadcasts - Which segments or lists should be used in flows and email broadcasts - Preferences about campaign management (e.g. "campaigns should always contain one email broadcast per blog post") **Note:** Memories and Knowledge Documents serve a similar purpose and are mostly interchangeable. Typically, memories reflect workflow preferences, whereas Knowledge Documents contain core information about the brand. ## Under the Hood: Skills Behind the scenes, Quotient uses **skills** to handle different types of tasks. Each skill gives Quotient specialized knowledge and tools for a particular area of the platform, such as writing blogs, composing emails, or building customer segments. You don't need to think about which skill is needed for a given task - Quotient automatically loads the right skill(s) based on what you're asking it to do. Just describe what you want to accomplish, and Quotient will take it from there. -- End of: /working-with-ai -- Start of: /audience/import-audience --- title: Import Audience description: Import contacts into Audience with a CSV file. order: 1 --- If you already have contacts in another system, you can import them into Audience with a CSV instead of adding people one by one. Start from the [Upload CSV page](/s/most-recent-business/people/import-people/upload-csv), map your columns to Quotient fields, and then run the import. Quotient requires two fields for each contact: 1. `EMAIL` — a valid email address. 2. `EMAIL SUBSCRIPTION STATUS` — the contact's current marketing permission status. Most other columns (like first name, company, job title, phone, city, and country) are optional, but including them usually makes segmentation and personalization more useful later. ## Email Subscription Status Values Use one of the following values in the `EMAIL SUBSCRIPTION STATUS` column: - `SUBSCRIBED` — The person is opted in and can receive marketing emails. - `NOT_SUBSCRIBED` — The person has not opted in and should not receive marketing emails. - `UNSUBSCRIBED` — The person explicitly opted out and should not receive marketing emails. - `PENDING` — The person's subscription is waiting for confirmation. These meanings match how unsubscribe and consent handling works in Quotient, so it is important to use the exact values in your CSV. ## Validation Before Import Before import starts, Quotient checks the first 100 records in your file. If it finds invalid values for `EMAIL SUBSCRIPTION STATUS`, the upload is blocked so you can fix the data first. -- End of: /audience/import-audience -- Start of: /audience/index --- title: Building an Audience description: Understanding and engaging with your customers in Quotient order: 7 --- Documentation Graphic Quotient's Audience section helps you understand and engage with your customers effectively. The platform enables you to: - Track customer interactions and behaviors across channels - Build detailed customer segments based on engagement patterns - Personalize marketing campaigns using customer data - Measure and analyze customer engagement over time ## Key Features ### Import Audience Upload a CSV to quickly add or update contacts in bulk. [Start an import](/s/most-recent-business/people/import-people/upload-csv), and review the [import guide](audience/import-audience) for required fields and validation. ### People View detailed information about individual customers, including their purchase history, email engagement, and preferences. [Explore your people](/s/most-recent-business/people) or learn more in our [people guide](audience/people). ### Segments Create dynamic groups of customers based on shared characteristics or behaviors. [View your segments](/s/most-recent-business/segments) to target your marketing campaigns and analyze customer patterns. ### Working with Quotient Ask Quotient to help you understand your customers better and suggest targeted marketing strategies based on your audience data. -- End of: /audience/index -- Start of: /audience/location --- title: Profile Location description: How Quotient determines where your customers are located order: 4 --- Understanding where your customers are located is crucial for personalized marketing. Quotient uses multiple data sources to build an accurate picture of each customer's location. ## How We Determine Location Quotient uses several sources to determine customer location, in order of priority: ### 1. Profile Location When a customer makes a purchase on your Shopify store, we get their billing address. This is our most reliable source of location data since customers typically enter their real address for billing purposes. We also use saved default addresses from Shopify customer accounts. For example, if Jane places an order and enters a billing address in Toronto, Ontario, Canada, we'll use this as her primary location. This helps ensure marketing emails she receives are relevant to her region. ### 2. Company Location If a person is associated with a company in your CRM and we don't have their direct location, we'll infer their location from the company's address. This is useful for B2B scenarios where individual contact addresses may not be available. For instance, if Bob works at TechStart Inc which is headquartered in Austin, Texas, and we don't have Bob's personal address, we'll use Austin as his location. ### 3. Analytics Events As a last resort, we use location data from analytics events (like page views or clicks) captured during website visits or interactions with your marketing campaigns. While less precise than profile or company addresses, this helps us understand where visitors are browsing from before they provide any address information. ## How We Choose Between Sources We follow a strict priority order to always use the most reliable location data available: 1. Profile location from orders or saved addresses (highest priority) 2. Company location inferred from associated company 3. Analytics event location (lowest priority) This means that: - If a customer has a known address, we'll always use that - If they're associated with a company, we'll use the company's location - Only if we have neither will we fall back to their analytics event location As customers interact more with your store - from browsing to creating an account to making purchases - our understanding of their location becomes increasingly accurate. ## Viewing Location Source On the person detail page, you'll see a small label next to the location indicating where the data came from: **Profile**, **Company**, or **Analytics**. Hover over the label to see more details about the source. ## Why Location Matters Knowing where your customers are helps you: - Send emails at the right time for their timezone - Create location-specific campaigns (like "Free Shipping to California") - Personalize content based on regional preferences - Comply with regional marketing regulations For example, you might want to: - Send a special promotion just to customers in New York - Ensure customers in Australia receive emails during their daytime - Notify West Coast customers about a pop-up shop in Los Angeles -- End of: /audience/location -- Start of: /audience/people --- title: Understanding Customer Profiles description: A deep dive into customer profiles in Quotient order: 2 --- A customer profile in Quotient is a comprehensive record of an individual customer's interactions with your business. Each profile helps you understand who your customers are and how they engage with your brand. ## What's in a Profile? Every customer profile includes: ### 1. Basic Information - Email address - Name (if provided) - Location and timezone - Sign-up date ### 2. Shopping Activity - Purchase history - Total spend - Average order value - Cart activity - Product browsing history ### 3. Email Engagement - Email subscription status - Open and click rates - Email preferences - Campaign responses ### 4. Custom Properties - Tags - Custom attributes - Segment memberships - Notes and annotations ### 5. Lead Score - `leadScore` — an integer you assign to indicate how qualified or engaged a person is. Higher values typically represent more qualified leads. Defaults to `0` and can be set or updated via the API. ## Viewing People To access customer profiles: 1. Navigate to the **[People](/s/most-recent-business/people)** page in your dashboard 2. Use the search bar to find specific customers 3. Click on any profile to view detailed information ## Working with Profiles You can: - Add notes to profiles - Update custom properties - View detailed engagement timelines - Export profile data - Create segments based on profile attributes Ask Quotient to analyze profiles and identify patterns in customer behavior. Try asking it questions about specific profiles or customer groups. ## Setting Lead Score via the API You can set or update a person's `leadScore` when creating or updating them via `POST /api/v0/audience/people`: ```typescript await client.audience.people.upsert({ emailAddress: "jane@example.com", leadScore: 85, }); ``` `leadScore` is an integer (default `0`). Pass any non-negative integer to reflect how qualified or engaged the person is. You can update it at any time by upserting the person with a new value. -- End of: /audience/people -- Start of: /audience/segments --- title: Customer Segments description: Creating and managing customer segments in Quotient order: 3 --- Segments in Quotient let you group customers based on shared characteristics or behaviors. They provide a powerful foundation for targeted marketing, personalization, and customer flow management. ## Understanding Segments A segment is a group of customers who match specific criteria you define. Segments update dynamically - as customers' data changes, they'll automatically move in and out of segments based on whether they meet the criteria. Segments are particularly valuable for: - Sending targeted emails - Creating personalized customer flows - Analyzing customer behavior patterns - Prioritizing sales and support resources ## Creating Segments Quotient offers two different approaches to create segments, letting you choose the method that works best for your needs: 1. **Visual Editor** - A drag-and-drop interface for creating segments with precise control 2. **Chat** - Ask Quotient to build segments from natural language descriptions You can freely choose between these methods depending on your preferences, the complexity of your segment, and your comfort level with technical details. Both approaches create the same type of segments with identical capabilities. ### 1. Segment Editor Navigate to **[Segments](/s/most-recent-business/segments)** to use our visual editor. The editor lets you combine multiple filters with logical operators to define your target audience. #### Available Filter Types ##### Person Filters - **Properties**: Filter based on custom properties you've defined (text fields, numbers, dates, etc.) - **Email Subscription**: Target based on subscription status (subscribed, pending, unsubscribed) - **Location**: Filter by country, region, city using standard codes - **Timezone**: Filter by IANA timezone identifiers ##### Analytics Filters - **Events**: Filter based on actions like page views, add to cart, email opens - **Event Frequency**: Target based on number of occurrences (exactly, greater than, less than, between) - **Time Periods**: Filter events within specific timeframes (hours, days, weeks) ##### Company Filters - **Company Name**: Target customers from specific companies - **Company Location**: Filter by company's geographical location - **Company Industry**: Segment by industry categories - **Company Revenue**: Filter by company revenue ranges with currency options - **Company Size**: Segment by employee count (enterprise, SMB, startup) ##### Deal Filters - **Deal Amount**: Filter based on deal values (high, mid, low value deals) - **Deal Status**: Target based on deal stages (in progress, won, lost, early stage) ##### Shopping Filters - **Orders**: Filter by order count, frequency, or recency - **Total Spent**: Target based on customer spending thresholds #### Logical Operators Combine filters with: - **AND**: Customers must match all conditions - **OR**: Customers must match at least one condition - **NOT**: Exclude customers who match specific conditions ### 2. Building Segments with Quotient You can also ask Quotient to build segments through natural conversation. Simply describe the customers you want to target, and it will create the appropriate segment. #### Example Prompts **Basic Segments:** - "Create a segment of customers who spent over $100 last month" - "Show me customers who haven't opened emails in 30 days" - "Find customers in the Pacific timezone who bought recently" **Company-Based Segments:** - "Create a segment of customers from tech companies in California" - "Find people from healthcare companies with more than 100 employees" - "Segment customers from companies with over $10M in revenue" **Deal-Based Segments:** - "Create a segment of people with deals in the proposal stage" - "Find customers with high-value deals over $50,000" - "Segment people with won or lost deals in the last quarter" **Complex Segments:** - "Create a segment of customers from financial companies who opened our last email and have active deals" - "Find male customers in Canada who have spent over $500 and have viewed our product page at least 3 times" - "Create a segment of enterprise customers who haven't engaged in 90 days but have previously purchased" ## Advanced Segmentation Strategies ### Behavioral Segmentation Target customers based on how they interact with your business: - **Engagement Level**: Highly engaged vs. at risk of churn - **Purchase Frequency**: Frequent buyers vs. one-time customers - **Product Interest**: Based on page views, searches, or cart additions - **Email Response**: Regular openers vs. non-responders ### Lifecycle Segmentation Target based on customer flow stage: - **New Subscribers**: Recent signups who haven't purchased - **First-Time Buyers**: Converted from prospects to customers - **Repeat Customers**: Made multiple purchases - **VIP Customers**: High lifetime value, frequent purchasers - **At-Risk**: Declining engagement or purchase frequency - **Lapsed**: Haven't engaged in a defined timeframe ### B2B Segmentation For business customers, leverage company and deal data: - **Industry Vertical**: Target specific industries with relevant messaging - **Company Size**: Different approaches for enterprise vs. SMB - **Deal Stage**: Tailor content based on sales funnel position - **Deal Value**: Prioritize high-value prospects - **Decision Maker Role**: Target based on position in company ## Using Segments Once created, you can use segments in multiple ways: ### Email Broadcast Targeting - Select specific segments as the audience for your email broadcast - Exclude segments from receiving certain campaigns - Create more personalized messaging for different customer groups - A/B test campaign effectiveness across different segments ### Customer Flow Personalization - Start flows for specific segments - Create conditional branches in flows based on segment membership - Customize flow actions based on which segments a customer belongs to ## Best Practices ### Segment Design 1. **Start with clear objectives**: Define what you want to achieve before creating segments 2. **Keep segments focused**: Create specific segments for clear use cases rather than trying to cover too many criteria in one segment 3. **Use descriptive names**: Name segments clearly to communicate their purpose (e.g., "High-Value Tech Companies" is better than "Segment A") 4. **Add detailed descriptions**: Document segment criteria and intended use cases ### Segment Management 1. **Update regularly**: Review and update your segments periodically to ensure they remain relevant 2. **Archive unused segments**: Keep your workspace clean by archiving segments you no longer need 3. **Test before sending**: Always preview your segment size and composition before using it in campaigns 4. **Start small**: When using a new segment, test with a small campaign before scaling 5. **Track segment performance**: Monitor how different segments respond to your marketing ### Optimization Strategies 1. **Refine based on performance**: Adjust segment criteria based on campaign results 2. **Progressive profiling**: Build more detailed segments over time as you gather more customer data 3. **Segment hierarchies**: Create broader segments for general campaigns and more specific sub-segments for targeted messaging 4. **Combine behavioral and demographic data**: The most effective segments often use both types of information ## Troubleshooting ### Common Issues - **Empty segments**: If a segment contains no users, check for overly restrictive criteria or data issues - **Oversized segments**: Very large segments may need more specific criteria for effective targeting - **Slow-updating segments**: Some segment criteria may take time to evaluate for large customer bases - **Conflicting criteria**: Using contradictory conditions may create unexpected results ### Getting Help Ask Quotient to help you: - Diagnose issues with existing segments - Optimize segment criteria for better targeting - Suggest new segmentation strategies based on your business goals - Convert natural language descriptions into technical segment definitions -- End of: /audience/segments -- Start of: /email/email-status --- title: Email Status description: What Email Status means inside of Quotient --- When you send email with Quotient, each email will have a status that tracks it's delivery and engagement. Please see the table below for an overview of each status and its description:
Status Description
`QUEUED` Quotient has queued the email to be sent
`SENT` Quotient is attempting to deliver the email to the recipient
`ERROR` An error prevented Quotient from sending the email
`DELIVERED` Quotient delivered the email to the recipient
`DELIVERY_DELAYED` Quotient could not deliver the email due to a temporary issue; Quotient will continue attempting delivery
`BOUNCED` The recipient's mailbox permanently rejected the email
`OPENED` Quotient delivered the email and the recipient has opened it
`CLICKED` Quotient delivered the email, the recipient has opened it, and clicked on a link inside of it
`COMPLAINED` Quotient delivered the email and the recipient marked it as spam
Please note that the status of an email reflects the most recent event to occur to it, so if a recipient opens an email, clicks a link inside of it, and then marks the email as spam, Quotient will mark this email as `COMPLAINED`. -- End of: /email/email-status -- Start of: /email/index --- title: Sending Email description: Introduction to email marketing with Quotient order: 6 --- Documentation Graphic Email is one of the most important tools in your marketing toolkit. Email marketing remains one of the most effective ways to nurture leads, build relationships with customers, and drive sales for your business. Quotient lets you craft, send, and measure emails — and you can ask Quotient to handle any part of the process for you. ## Core Concepts **Broadcasts** [Broadcasts](/s/most-recent-business/email-broadcasts) are a one-time blast email to a portion of your audience. A broadcast is made up of... - **Content:** HTML content that recipients will see in their inbox. You can edit the content of the email directly in the email editor, or you can ask Quotient to make updates on your behalf. - **Metadata**: Additional data about the email including the subject line, preview text, and from address. Setting metadata correctly helps improve the performance and deliverability of emails. - **Send Time:** The time at which the email will begin sending to recipients. We say "begin sending" because not all of the emails will be sent immediately at the send time. To improve deliverability, we send the emails in batches over the course of several minutes. Email broadcasts follow a three-stage lifecycle: **Draft** → **Scheduled** → **Launched**. You can either schedule a broadcast for a specific time in the future or launch it immediately. Once the broadcast is launched and emails start sending, it moves to the "Launched" status. Once launched, broadcasts can no longer be modified - this is different from blogs, which can be re-published after going live. Once an email has been sent, you can't change it. **Audience** “Audience” refers to the people you've designated to receive an email broadcast. The audience can be made up of both **lists** and **segments**. You can learn more about the difference in the article on Building Your Audience. You can include multiple lists and/or segments in the audience for your broadcast. If a person appears in multiple, Quotient will deduplicate and ensure that they only receive the email once. **Analytics** If you're using Quotient to send email, we will automatically track the performance of your broadcasts, including: 1. **Delivery Rate:** Of the emails sent, how many were successfully delivered. 2. **Open Rate:** Of the emails delivered, how many were opened by the recipient. 3. **Click Rate:** Of the emails opened, how many people clicked on a link leading to your website. **Templates** [Templates](/s/most-recent-business/email-template) are reusable blueprints of email content. It's important to understand that templates are not directly sent out - they must either be cloned into a broadcast or used as part of a flow. There are two different ways you can use templates: 1. **Starting Point for Broadcasts:** It's common to clone templates as a starting point for email broadcasts. This ensures that all email broadcasts maintain a consistent structure and look. For example, you might have a template for your weekly newsletter, and each week you would clone it and replace the content for that week. 2. **In Automated Flows:** Templates can also be used inside of **flows**. In Quotient, flows are automated processes that can send email to customers based on pre-defined schedules or triggers. A common example would be sending new users an automated welcome series after they sign up for your product. To learn more about flows, check out the article on Automating Workflows. **Components** [Components](/s/most-recent-business/email-components) are reusable blocks of email content that can be used in both broadcasts and templates and stay automatically up-to-date. The most common examples of components are **headers and footers**. Typically you want your headers and footers to stay consistent across all your emails, and if you change them, you want them to update automatically in all the templates/broadcasts where they're used. **Email Domains** [Email domains](/s/most-recent-business/email-settings) are the domains that your emails are sent from (e.g., `updates@yourcompany.com`). Using a custom email domain is crucial for deliverability and brand consistency. It helps ensure your emails reach the inbox rather than being marked as spam. Quotient helps you set up and verify custom email domains with proper DNS configuration. You can learn more about setting up custom DNS in our [Custom DNS guide](/docs/email/dns). ## Creating Emails with Quotient Ask Quotient to help you create any of the above — broadcasts, templates, components, and finding the right audience for each email. Quotient has access to your Knowledge Store, so the content it creates will be consistent with your brand's voice and messaging strategy. Here are some tips for getting the most out of Quotient when working with email: - When setting up your Quotient account, ask Quotient to create a standard header, footer, and "base template", and ask it to remember to always use those as a starting point. This helps keep your emails consistent and on-brand, and ensures that Quotient doesn't have to reinvent the wheel with each new broadcast. - Formatting emails is notoriously difficult due to the esoteric requirements of legacy email clients. We recommend asking Quotient to take the first stab at creating the content. From there you can use the editor to tweak copy and styles. This is often easier than creating the formatting yourself. - You can upload screenshots of emails from other brands to the chat panel and ask Quotient to copy them or use them as inspiration. - Emails should always have CTAs that lead to pages on your website where readers can learn more and hopefully enter your conversion funnel. To set CTAs up properly, Quotient needs to understand your website structure. Ask Quotient to crawl your website and create a Knowledge Doc describing it, which it can then use to construct links. ## Inbound vs. Outbound Email It's important to note that Quotient is used for **inbound email marketing**, not **outbound email marketing.** Inbound marketing targets people who have _already_ shown interest in your product - like signing up for a demo or newsletter - whereas outbound marketing, also known as "cold email", proactively reaches out to people regardless of their expressed interest. There are a few key differences between inbound and outbound email marketing:
Inbound Outbound
Typically comes from a company email address, e.g. updates@mail.company.com Usually comes from an individual salesperson, e.g. max@getquotient.ai
Emails are not meant to be replied to and may come from a "noreply" address Emails are meant to be replied to - the goal is to start a conversation with the salesperson
Emails may be somewhat personalized, but typically are sent as "broadcasts", i.e. sending the same email to many people Emails are often highly personalized and tailored to each individual prospect
Emails typically contain rich formatting, images, and CTAs Emails are usually written in plain text
If you’re looking for an outbound email marketing platform, here are a few we recommend: - [SalesLoft](https://www.salesloft.com/) - [Apollo](https://www.apollo.io/) - [Outreach](https://www.outreach.io/) - [Unify](https://www.unifygtm.com/) ## Next Up -- End of: /email/index -- Start of: /email/suppression --- title: Suppression & Bounce description: Understanding email suppression and bounce handling. --- Quotient uses a combination of user-submitted manual suppression and bounce detection to manage email suppression lists. When an email address is added to a business's suppression list, Quotient will automatically suppress the email address. ## Manual Suppression A Quotient user can manually suppress an email address via the `manuallySuppressed` field when uploading an email list. Please see the [building-email-list](/docs/email/building-email-list#3.-manual-upload-and-quick-add) guide for more information. ## Automatic Suppression Quotient allows users to upload all syntatically valid email addresses, but will suppress email to email addreses with invalid top-level domains (TLDs) as well as to email addresses that end in IANA special-use domains. **For more information, see the resources below:** - [IANA List of Top-Level Domains](https://data.iana.org/TLD/tlds-alpha-by-domain.txt) - [IANA Special-Use Domain Names](https://www.iana.org/assignments/special-use-domain-names/special-use-domain-names.xhtml) ## Bounces An email "bounces" when it is not delivered to the inbox of the recipient, or if the email is rejected by the recipient's email provider. If your Quotient account has a large number of bounces, this can negatively impact deliverability. In order improve deliverability, Quotient monitors and detects email bounces for all emails sent via Quotient. ### Bounce Types and Detection Quotient monitors and detects email bounces for all emails sent via Quotient. There are two types of bounces and a number of subtypes: - **Hard Bounce:** A hard bounce is a permanent failure to deliver an email. - **General**: The email provider sent a hard bounce message - **Domain Does Not Exist**: The email address domain does not exist - **User Does Not Exist**: The email address user does not exist - **Blocked**: Your domain is blocked by the recipient's email provider - **Soft Bounce:** A soft bounce is a temporary failure to deliver an email. - **General**: The email provider sent a general bounce message, in which case the email address may not bounce again in the future - **Mailbox Full**: The recipient's mailbox is full - **Message Length & Size**: The message is too long or to large - **Rate Limited**: The provider is receiving too many emails within a given time period and is temporarily rejecting new ones - **Content**: The content of the message is rejected by the recipient's email provider for spam reasons - **Sender Reputation**: The provider determines your domain has poor sender reputation - **DNS Issues**: Temporary DNS failures or routing problems Email addresses that receive **Hard Bounces** are automatically suppressed and will not receive any emails. These email addresses are added to Quotient's global suppression list, which is used for all emails across all businesses. This ensures that emails are not sent to email addresses that are known to bounce. Email addresses that receive **Soft Bounces** are not suppressed until they exceed our soft bounce occurence threshold of 7 for a given business. At that point, they are added to the business's suppression list. ### Suppression Lists Quotient maintains a global suppression list for hard bounces. This means that once an email address is suppressed due to bouncing, it will remain suppressed for all emails across all businesses, ensuring that emails are not sent to email addresses that are known to bounce. Quotient also maintains a business-specific suppression list for soft bounces and manually suppressed emails. This means that once an email address is suppressed due to bouncing or manual suppression, it will remain suppressed for the duration of the business's Quotient account. -- End of: /email/suppression -- Start of: /email/unsubscribe --- title: Unsubscribe description: How email unsubscribes work and how to customize the unsubscribe page. --- It is crucial to provide email recipients with the ability to unsubscribe from your email broadcasts in order to maintain a good sender reputation. Giving recipients the ability to unsubscribe from your email broadcasts: - reduces the likelihood that your emails are marked as spam - improves deliverability for your email broadcasts In Quotient, use the **Unsubscribe Link** component in your email footer to give recipients the option to unsubscribe from your emails. Quotient also includes a `List-Unsubscribe` header on outgoing emails, so many inbox providers can show a native one-click unsubscribe button. - **One-click unsubscribe (inbox provider button):** The inbox provider calls Quotient's unsubscribe endpoint. The person is unsubscribed without needing to load a confirmation page. - **Footer link unsubscribe:** The person lands on your branded unsubscribe page and confirms by clicking the unsubscribe button. ## What Happens When Someone Unsubscribes Quotient immediately updates that person's email subscription status to `UNSUBSCRIBED`. From that point forward, they are excluded from marketing sends, even if they still appear in a list or segment. ## Subscription Statuses
State Description
`SUBSCRIBED` Opted in. Will receive marketing emails.
`NOT_SUBSCRIBED` Has not opted in. Will not receive marketing emails.
`UNSUBSCRIBED` Explicitly opted out. Will not receive marketing emails.
`PENDING` Subscription pending confirmation.
## Customizing the Unsubscribe Page You can customize the copy on your unsubscribe page in [Email Settings](/s/most-recent-business/settings/email-settings): - **Dark mode** — enables a dark unsubscribe page treatment - **Show logo** — controls whether your brand logo appears on the page - **Accent color** — sets the unsubscribe button color - **Heading** — defaults to "Unsubscribe from [Brand Name]" - **Subheading** — defaults to "You're currently subscribed to emails from [Brand Name]." - **Button text** — defaults to "Unsubscribe" Quotient also provides a preview so you can check how the page looks before saving changes. -- End of: /email/unsubscribe -- Start of: /hubspot/email-sync --- title: Email Synchronization description: Sync Quotient email templates and broadcasts to HubSpot as marketing emails order: 5 --- ## Overview Quotient's email synchronization feature allows you to seamlessly sync your email templates and broadcasts to HubSpot as marketing emails. This integration enables you to leverage HubSpot's email delivery infrastructure while maintaining Quotient's AI-powered content creation and campaign management capabilities. The email sync system automatically creates a customizable base template in HubSpot and handles the complex process of converting Quotient's email format to HubSpot's marketing email structure. ## Prerequisites ### HubSpot Plan Requirements Email synchronization requires specific HubSpot capabilities: - **Marketing Hub Starter** or higher (for marketing email functionality) - **Marketing Email API access** (included in paid Marketing Hub plans) - **Design Manager access** (for template customization) ### Required Permissions Your HubSpot integration needs these scopes: - `content` - For creating and managing email templates

Plan Compatibility

Email sync is designed to work gracefully across HubSpot plan levels. CRM-only users get core contact and list management, while Marketing Hub users get full email broadcasting capabilities.

## Setting Up Email Sync ### Step 1: Enable Email Synchronization 1. **Navigate** to HubSpot integration settings and go to the **Email** tab 2. **View the Email Sync configuration** section
HubSpot Email tab showing email sync configuration options
3. **Click "Enable Sync"** to activate email synchronization and confirm the setup ### Step 2: Template Setup When you enable email sync, Quotient automatically: 1. **Validates your HubSpot capabilities** to ensure email sync is supported 2. **Creates the base template** (`quotient-base.html`) in your HubSpot Design Manager 3. **Configures the template** with the required modules for Quotient email injection 4. **Tests the setup** to ensure emails can be created successfully
Email sync setup process showing template creation and configuration in HubSpot

Automatic Template Creation

Quotient automatically creates and validates the{" "} quotient-base.html template in your HubSpot Design Manager. This template includes all necessary modules and structure for seamless email injection.

HubSpot Email tab showing email sync configuration options
## The quotient-base.html Template ### What It Is The `quotient-base.html` template is a custom HubSpot email template that Quotient creates in your Design Manager. This template serves as the foundation for all emails synced from Quotient to HubSpot. **Key Features:** - **Email body injection point** - Where Quotient inserts your email content - **Customizable footer** - Editable company information and unsubscribe links - **HubSpot compliance** - Includes required unsubscribe and view-as-webpage links - **Responsive design** - Works across all email clients and devices ### Template Structure The template includes these essential components: ```html
...
View this email as a web page
{% module "email_template_main_email_body" path="@hubspot/email_body" %} ``` ### Customizing the Footer You can customize the footer of the `quotient-base.html` template through HubSpot's Design Manager: 1. **In HubSpot**, go to Marketing → Files and Templates → Design Manager 2. **Navigate** to the Templates folder 3. **Find and click** `quotient-base.html` 4. **Edit the footer section** (the `
HubSpot Design Manager interface showing template editing capabilities
The screenshot above shows HubSpot's Design Manager where you can customize the `quotient-base.html` template. You can also view the template structure:
HubSpot email template structure showing the quotient-base.html template layout
**What You Can Customize:** - Company name and address formatting - Footer styling (colors, fonts, layout) - Additional links (privacy policy, social media) - Custom branding elements - Legal disclaimers or compliance text

Don't Modify Core Structure

While you can customize the footer and styling, avoid modifying the core template structure or the{" "} email_template_main_email_body module, as this could break email injection from Quotient.

## Email Template Sync ### How Template Sync Works When you sync a Quotient email template to HubSpot: 1. **Template Creation**: Creates a new marketing email in HubSpot using `quotient-base.html` 2. **Content Injection**: Injects your Quotient email content into the template body 3. **Style Mapping**: Converts Quotient styling to HubSpot-compatible CSS 4. **Metadata Transfer**: Copies template name, subject line, and other metadata ### Syncing Email Templates & Broadcasts **To sync an email template or broadcast:** 1. **In Quotient**, navigate to your email template or broadcast 2. **Click "Sync to HubSpot"** in the actions menu
Quotient email template showing Sync to HubSpot button
Email sync button interaction showing the sync process
3. **Success confirmation** - A toast notification will confirm the sync was successful That's it! Your email template or broadcast is now available in HubSpot as a marketing email. **Template Updates:** - Changes to Quotient templates can be re-synced to update the HubSpot version - HubSpot maintains a link to the original Quotient template - Simply click "Sync to HubSpot" again to update the HubSpot version ### What Gets Synced **Template Properties:** - Template name and description - Email subject line - HTML content and styling - Preview text - Template categorization **Content Handling:** - **HTML Structure**: Preserved with HubSpot-compatible formatting - **Images**: Uploaded to HubSpot's file manager and linked - **Styling**: Converted to inline CSS for email client compatibility - **Dynamic Content**: Quotient variables mapped to HubSpot personalization tokens ### Audience Targeting **List Mapping:** - Quotient lists are automatically synced to HubSpot static lists - Quotient segments map to HubSpot dynamic lists (where possible) - Multiple lists can be combined for complex targeting ### Scheduling and Delivery **Scheduling Options:** - **Immediate send**: Send the email right away through HubSpot - **Scheduled send**: Set a specific date and time for delivery - **Draft mode**: Create the email in HubSpot without scheduling **Delivery Tracking:** - Email status syncs back from HubSpot to Quotient

Status Synchronization

Email broadcast status syncs from HubSpot back to Quotient: DRAFT, SCHEDULED, and LAUNCHED states are automatically updated to keep both systems in sync.

## Email Status Tracking ### Status Mapping Email status is synchronized between systems to provide accurate campaign tracking:
HubSpot Status Quotient Status Description
DRAFT DRAFT Email created but not scheduled
SCHEDULED SCHEDULED Email scheduled for future delivery
PROCESSING LAUNCHED Email currently being sent
SENT LAUNCHED Email delivery completed
PUBLISHED LAUNCHED Email published and available
## Troubleshooting Email Sync ### Common Issues **Template Creation Failed** - Verify HubSpot plan includes marketing email functionality - Check Design Manager permissions in HubSpot - Ensure the `quotient-base.html` template was created successfully **Email Content Not Displaying** - Verify the email template uses the correct base template - Check that the `email_template_main_email_body` module exists - Review HTML formatting for HubSpot compatibility **Audience Targeting Issues** - Ensure target lists are synced to HubSpot - Verify list members have valid email addresses - Check HubSpot list permissions and access **Status Not Updating** - Check that email broadcast has a valid HubSpot ID - Review sync logs for status update errors - Trigger manual sync to refresh status information ### Best Practices **Template Management:** - Use descriptive names for synced templates - Regularly review and clean up unused templates in HubSpot - Test template rendering across different email clients **Content Optimization:** - Optimize images for email delivery before syncing - Use HubSpot-compatible HTML and CSS - Test personalization tokens with sample data **Audience Management:** - Keep lists synchronized and up-to-date - Use suppression lists to manage unsubscribes - Segment audiences appropriately for targeted campaigns ## Next Steps Once you've set up email synchronization: 1. **[Troubleshooting](/docs/hubspot/troubleshooting)** - Track email sync operations and performance 2. **[Advanced Workflows](/docs/flow)** - Integrate email campaigns with Quotient automation 3. **[Campaign Attribution](/docs/campaign)** - Track email performance in multi-channel campaigns --- **HubSpot Help Resources:** - [HubSpot Email Marketing](https://knowledge.hubspot.com/email) - Complete email marketing guide - [Using Design Manager](https://knowledge.hubspot.com/cos-general/use-the-design-manager) - Template customization help - [Creating Email Templates](https://knowledge.hubspot.com/email/create-and-edit-email-templates) - Template creation guide - [Email Personalization](https://knowledge.hubspot.com/email/use-personalization-tokens-in-your-emails) - Personalizing your emails -- End of: /hubspot/email-sync -- Start of: /hubspot/field-mappings --- title: Field Mappings & Custom Properties description: Configure how HubSpot fields map to Quotient fields and work with custom properties order: 3 --- ## Overview Field mappings control how data flows between HubSpot and Quotient, ensuring that information is correctly synchronized between the two systems. Quotient uses a sophisticated two-phase transformation system that combines built-in mappings for critical fields with user-configurable mappings for custom business needs. ## How Field Mappings Work ### Two-Phase Transformation System Quotient processes HubSpot data through two distinct phases: **Phase 1: Built-in Transformations** - Non-configurable logic for critical and complex fields - Handles essential data like email addresses, IDs, and relationships - Manages complex transformations like address parsing and revenue calculations **Phase 2: Configurable Mappings** - User-customizable mappings for standard and custom fields - Default mappings provided for common HubSpot properties - Support for custom properties and business-specific fields This approach ensures data integrity for critical fields while providing flexibility for your unique business requirements. ## Default Field Mappings Quotient provides sensible default mappings for common HubSpot properties. These can be customized to match your specific needs. ### Contact (HubSpot) → Person (Quotient)
HubSpot Field Quotient Field Type Direction
email emailAddress Built-in Bi-directional
firstname firstName Default Inbound
lastname lastName Default Inbound
jobtitle jobTitle Default Inbound
phone mainPhoneNumber Default Inbound
department department Default Inbound
### Company (HubSpot) → Company (Quotient)
HubSpot Field Quotient Field Type Direction
name name Built-in + Default Bi-directional
description description Default Inbound
industry industry Built-in + Default Inbound
website website Default Inbound
phone phoneNumber Default Inbound
annualrevenue revenue Built-in Inbound
numberofemployees totalEmployees Built-in Inbound

Built-in vs Default Mappings

Built-in mappings handle critical fields and complex transformations that ensure data integrity.{" "} Default mappings are user-configurable and can be modified to match your business needs.

## Built-in Transformations These transformations are automatically applied and cannot be modified to ensure data integrity: ### Contact Built-ins - **`emailAddress`**: Critical for person identification and deduplication - **`hubspotId`**: Maintains sync relationship between systems - **`source`**: Automatically set to "HUBSPOT" for tracking - **`associatedCompanyHubspotIds`**: Preserves company relationships - **Email Marketing Defaults**: New contacts default to "NOT_SUBSCRIBED" ### Company Built-ins - **Address Parsing**: HubSpot's combined address fields are decomposed into: - `address` (street address) - `city` - `state` - `zip` - `country` - **Revenue Processing**: Handles currency conversion and formatting - **Industry Arrays**: Converts HubSpot industry strings to Quotient arrays - **Social Media Links**: Extracts and formats social media URLs ### Deal Built-ins - **Pipeline Mapping**: Preserves HubSpot pipeline and stage information - **Amount Formatting**: Handles currency and decimal formatting - **Date Processing**: Converts HubSpot date formats to Quotient standards ## Custom Properties ### Creating Custom Properties in HubSpot Before mapping custom properties, ensure they exist in HubSpot: 1. **In HubSpot**, go to Settings → Properties 2. **Select the object type** (Contacts, Companies, or Deals) 3. **Create a new property** with these considerations: - Choose an appropriate **field type** (text, number, date, etc.) - Set a clear **internal name** (this will be used in mappings) - Configure **field options** if using dropdowns or checkboxes ### Supported Property Types Quotient supports all HubSpot property types with automatic data conversion:
HubSpot Type Quotient Type Notes
Single-line text STRING Direct mapping
Multi-line text STRING Preserves line breaks
Number NUMBER Handles decimals and integers
Date picker DATE Date only, no time
Date & time picker DATETIME Full timestamp with timezone
Dropdown select SINGLE_SELECT Maps option values, single choice
Multiple checkboxes MULTI_SELECT Multiple values from predefined options
Multi-line text (as list) LIST Flexible text list, line-separated
Radio select ENUM Single value selection
Yes/No BOOLEAN True/false values
HubSpot user USER Maps to Quotient users
### Mapping Custom Properties To create a custom field mapping: 1. **Navigate** to **[HubSpot integration settings](/s/most-recent-business/integrations/hubspot)** 2. **Go to Field Mappings** section 3. **Click "Add Field Mapping"**
Add Field Mapping button in the HubSpot field mappings interface
4. **Select the HubSpot Field**: Choose from available HubSpot properties
HubSpot field selection dropdown showing available properties to map
5. **Configure the mapping**: - **Quotient Field**: Choose existing field or create new custom property - **Data Type**: Automatically detected but can be overridden - **Sync Direction**: Choose Inbound, Outbound, or Bi-directional
Field mapping configuration showing Quotient field selection and sync direction options
### Example: Custom Lead Score Mapping Let's say you have a custom "Lead Score" property in HubSpot that you want to sync to Quotient: **HubSpot Setup:** - Property name: `lead_score` - Type: Number - Used for: Lead qualification scoring **Quotient Mapping:** - **HubSpot Field**: `lead_score` - **Quotient Field**: `leadScore` (custom property) - **Data Type**: `NUMBER` - **Direction**: `INBOUND` (HubSpot is the source of truth) ## Advanced Mapping Scenarios ### Handling Enumeration Fields For HubSpot dropdown and checkbox properties: **HubSpot Options:** ``` - Option 1: "Enterprise" - Option 2: "Mid-Market" - Option 3: "SMB" ``` **Quotient Mapping:** - Values are mapped exactly as they appear in HubSpot - Multiple selections are joined with semicolons - Empty selections map to null values ### Date and Time Handling **Date Fields:** - HubSpot date-only fields map to Quotient `DATE` type - Time information is ignored for date-only fields - Timezone is preserved for datetime fields **DateTime Fields:** - Full timestamp with timezone information - Automatic conversion between HubSpot and Quotient formats - Handles daylight saving time transitions ### User and Owner Mappings **HubSpot Owner Fields:** - `hubspot_owner_id` maps to Quotient user assignments - Requires users to exist in both systems - Falls back to null if user mapping not found ## Managing Field Mappings ### Viewing Current Mappings In the HubSpot integration settings: 1. **Default Mappings**: Pre-configured mappings for standard fields 2. **Custom Mappings**: Your business-specific field mappings 3. **System Mappings**: Built-in mappings that cannot be modified
HubSpot field mappings interface showing Quotient fields mapped to HubSpot fields with sync directions and actions
### Modifying Mappings **To Edit a Mapping:** 1. Find the mapping in the Field Mappings section 2. Click the edit icon 3. Modify the configuration 4. Save changes (triggers a sync for affected records) **To Delete a Mapping:** 1. Click the delete icon next to the mapping 2. Confirm the deletion 3. Data previously synced through this mapping remains unchanged ### Testing Mappings **Field Mapping Validation:** - Test mappings with sample data before full deployment - Use the "Test Sync" feature for individual records - Monitor sync logs for mapping errors or data type issues ## Troubleshooting Field Mappings ### Common Issues **Data Not Syncing** - Verify the field exists in both HubSpot and Quotient - Check that data types are compatible - Ensure the mapping direction allows the desired data flow **Data Type Errors** - Review HubSpot property type vs Quotient field type - Check for invalid data in source fields (e.g., text in number fields) - Verify enumeration options match between systems **Missing Custom Properties** - Ensure custom properties are created in HubSpot first - Check property permissions and visibility settings - Verify the property is associated with the correct object type ### Best Practices **Naming Conventions** - Use consistent naming between HubSpot and Quotient - Avoid special characters in custom property names - Use descriptive names that indicate the field's purpose **Data Type Selection** - Choose the most restrictive appropriate data type - Use `ENUM` for fields with limited, known values - Use `STRING` for flexible text fields **Sync Direction Strategy** - Use `INBOUND` when HubSpot is the authoritative source - Use `OUTBOUND` when Quotient generates the data - Use `BIDIRECTIONAL` carefully to avoid sync conflicts ## Read-Only Properties When syncing data from HubSpot, you may want to mark certain Quotient properties as **read-only**. This prevents users from editing these values in Quotient since HubSpot is the source of truth. **When to use read-only properties:** - **Inbound-only sync**: Data flows from HubSpot to Quotient but not back - **CRM-managed fields**: Values that should only be updated in HubSpot - **Calculated fields**: Scores or metrics computed in HubSpot - **Compliance data**: Information that requires CRM approval to change **Setting up read-only properties:** 1. When creating or editing a custom property in Quotient, check the "Read-only" checkbox 2. Read-only properties can still be used for segmentation and email personalization 3. Users will see these values but cannot edit them in forms or preference pages **Example use cases:** - Lead scores calculated by HubSpot workflows - Company industry classifications from HubSpot - Deal stages and pipeline information - Compliance flags or certification statuses ## Next Steps Once you've configured field mappings: 1. **[Set Up List Synchronization](/docs/hubspot/lists)** - Configure list and segment sync 2. **[Enable Email Sync](/docs/hubspot/email-sync)** - Sync email templates and broadcasts 3. **[Monitor Sync Performance](/docs/hubspot/troubleshooting)** - Track and optimize sync operations --- **HubSpot Help Resources:** - [HubSpot Properties Guide](https://knowledge.hubspot.com/properties) - How to create and manage properties - [Custom Properties in HubSpot](https://knowledge.hubspot.com/properties/create-and-edit-properties) - Step-by-step property creation - [HubSpot CRM Setup](https://knowledge.hubspot.com/crm-setup) - General CRM configuration help -- End of: /hubspot/field-mappings -- Start of: /hubspot/index --- title: HubSpot Integration description: Connect your HubSpot CRM with Quotient for powerful marketing automation order: 800 --- ## Overview The Quotient HubSpot integration provides comprehensive two-way synchronization between your HubSpot CRM and Quotient's AI-powered marketing platform. This integration enables you to leverage your existing CRM data for sophisticated marketing campaigns while maintaining data consistency across both platforms. ### Key Benefits - **Bi-directional sync** of contacts, companies, and deals - **Automated sync scheduling** with daily updates and on-demand synchronization - **Flexible field mappings** with support for custom properties - **Smart list synchronization** that respects HubSpot's dynamic vs static list types - **Email template and broadcast sync** with customizable branding - **Automated workflows** that trigger based on CRM data changes ### What Gets Synced The integration supports synchronization of the following HubSpot objects:
HubSpot Object Quotient Equivalent Sync Direction
Contacts People Bi-directional
Companies Companies Bi-directional
Deals Deals Inbound only
Dynamic Lists Segments Inbound only
Static Lists Lists Bi-directional
Marketing Emails Email Templates & Broadcasts Outbound only
## How It Works The integration keeps your data synchronized through multiple processes: 1. **Daily Automatic Sync**: Complete synchronization of all enabled data every night at midnight 2. **Manual Sync**: On-demand synchronization you can trigger anytime 3. **Background Processing**: Automatic progress tracking and error handling 4. **Scheduled Updates**: Regular data refresh to keep information current
HubSpot integration overview diagram showing data flow between HubSpot and Quotient
### Security & Privacy The integration uses secure authentication with HubSpot to protect your data. All information is encrypted during transfer, and you have complete control over what data is synchronized between the two platforms. ## Getting Started

1. Setup & Configuration

Connect your HubSpot account and configure basic sync settings.

Setup Guide →

2. Enable Object Sync

Choose which HubSpot objects to synchronize with Quotient.

Object Sync →

3. Configure Field Mappings

Map HubSpot fields to Quotient fields and set up custom properties.

Field Mappings →

4. Sync Lists & Segments

Understand how HubSpot lists work with Quotient segments and lists.

List Sync →
## Advanced Features ### Email Integration Sync your Quotient email templates and broadcasts directly to HubSpot as marketing emails. The integration automatically creates a customizable `quotient-base.html` template in your HubSpot Design Manager. [Learn about Email Sync →](/docs/hubspot/email-sync) ### Custom Properties & Advanced Mappings Create sophisticated field mappings between HubSpot custom properties and Quotient's flexible data model. Support for all HubSpot property types including enumerations, dates, and calculated fields. [Advanced Field Mappings →](/docs/hubspot/field-mappings#custom-properties) ## Support & Resources ### HubSpot Help Resources - [HubSpot Knowledge Base](https://knowledge.hubspot.com/) - Official HubSpot help articles - [HubSpot Community](https://community.hubspot.com/) - User forums and discussions - [HubSpot Academy](https://academy.hubspot.com/) - Free training courses - [HubSpot Support](https://help.hubspot.com/) - Contact HubSpot support directly ### Troubleshooting Having issues with your HubSpot integration? Check our comprehensive troubleshooting guide. [Troubleshooting Guide →](/docs/hubspot/troubleshooting) --- **Need Help?** Contact our support team or ask Quotient for assistance with your HubSpot integration. -- End of: /hubspot/index -- Start of: /hubspot/lists --- title: List & Segment Synchronization description: Understand how HubSpot lists sync with Quotient segments and lists, including dynamic vs static behavior order: 4 --- ## Overview HubSpot's list system works differently from traditional static lists, offering both dynamic (automatically updating) and static (manually managed) list types. Quotient's integration intelligently maps these to the appropriate Quotient equivalent: **dynamic lists become segments** and **static lists become lists**. This smart routing ensures that the automatic updating behavior of HubSpot dynamic lists is preserved in Quotient segments, while static lists maintain their manual management characteristics. ## Understanding HubSpot List Types ### Dynamic Lists (Active Lists) Dynamic lists in HubSpot automatically update their membership based on criteria you define. When a contact meets or stops meeting the criteria, they're automatically added or removed from the list. **Key Characteristics:** - **Automatically maintained** by HubSpot based on contact properties - **Automatic updates** when contact data changes during sync cycles - **Criteria-based membership** using HubSpot's filtering system - **Cannot manually add/remove contacts** - membership is determined by criteria **Common Use Cases:** - Contacts in a specific lifecycle stage - Companies with revenue above a threshold - Contacts who haven't been contacted in 30 days - Leads from specific marketing campaigns

Dynamic Lists → Quotient Segments

HubSpot dynamic lists sync to Quotient as segments{" "} because both automatically update their membership based on criteria. The filtering logic remains in HubSpot, while Quotient maintains the membership list.

### Static Lists (Manual Lists) Static lists in HubSpot are manually managed collections where you explicitly add and remove contacts. They don't automatically update based on criteria. **Key Characteristics:** - **Manually managed** - you control who's in the list - **Fixed membership** until you make changes - **Can import contacts** from files or other sources - **Supports bulk operations** for adding/removing contacts **Common Use Cases:** - Event attendee lists - Webinar registrants - Import lists from external sources - One-time campaign targets - Suppression lists

Static Lists → Quotient Lists

HubSpot static lists sync to Quotient as lists{" "} because both are manually managed collections. You can add/remove people in either system and changes will sync bi-directionally.

## How List Sync Works ### Smart Routing System Quotient automatically determines the correct destination for each HubSpot list based on its `processingType`:
HubSpot List Type Processing Type Quotient Destination Sync Direction
Dynamic List DYNAMIC Segment Inbound only
Static List MANUAL List Bi-directional
Snapshot List SNAPSHOT List Bi-directional
### Sync Dependencies List synchronization requires contact synchronization to be enabled: - **Contacts must be synced first** - lists are meaningless without the people in them - **Automatic dependency management** - enabling lists automatically enables contact sync - **Member resolution** - Quotient matches list members by email address ## Dynamic Lists → Segments ### What Gets Synced When a HubSpot dynamic list syncs to a Quotient segment: **Segment Properties:** - **Name**: Copied from HubSpot list name - **Description**: HubSpot description or auto-generated description - **Criteria**: Empty placeholder (filtering logic remains in HubSpot) - **Members**: Current list membership from HubSpot **Sync Behavior:** - **Inbound only** - changes flow from HubSpot to Quotient - **Membership updates** - when HubSpot criteria add/remove contacts - **Scheduled sync** - membership updates during daily sync cycles - **Daily refresh** - complete membership sync during nightly sync ### Limitations Since the filtering logic remains in HubSpot: - **Cannot edit criteria in Quotient** - segment criteria are managed in HubSpot - **Read-only membership** - cannot manually add/remove people in Quotient - **HubSpot dependency** - segment updates require active HubSpot integration

Why Segments Are Read-Only

Segments created from HubSpot dynamic lists are read-only in Quotient to prevent conflicts with HubSpot's automatic membership management. The criteria and membership are controlled by HubSpot's filtering system.

## Static Lists → Lists ### What Gets Synced When a HubSpot static list syncs to a Quotient list: **List Properties:** - **Name**: Copied from HubSpot list name - **Slug**: Auto-generated from name (with conflict resolution) - **Description**: HubSpot description or auto-generated description - **Members**: All contacts currently in the HubSpot list **Sync Behavior:** - **Bi-directional** - changes flow both ways - **Member management** - add/remove people in either system - **Conflict resolution** - most recent change wins - **Bulk operations** - supports large membership changes ### Bi-directional Sync Capabilities **From HubSpot to Quotient:** - Adding contacts to HubSpot list adds people to Quotient list - Removing contacts from HubSpot list removes people from Quotient list - Renaming HubSpot list updates Quotient list name **From Quotient to HubSpot:** - Adding people to Quotient list adds contacts to HubSpot list - Removing people from Quotient list removes contacts from HubSpot list - List changes trigger immediate sync to HubSpot ### Smart Member Sync The integration performs intelligent member synchronization: **Contact Resolution:** - Matches members by email address between systems - Handles contacts that exist in one system but not the other - Creates contacts in HubSpot if they don't exist (when syncing from Quotient) **Conflict Handling:** - Timestamp-based resolution for simultaneous changes - Preserves manual additions/removals from both systems - Logs conflicts for review and manual resolution ## Syncing Lists Back to HubSpot ### Creating New Lists in HubSpot You can sync Quotient lists to HubSpot to create new static lists: 1. **In Quotient**, navigate to your list 2. **Click "Sync to HubSpot"** in the list actions menu 3. **Choose sync options**: - Create new HubSpot list - Link to existing HubSpot list - One-time sync or ongoing synchronization ### Sync Process **Initial Sync:** 1. **List Creation**: Creates a new static list in HubSpot with the same name 2. **Member Addition**: Adds all Quotient list members to the HubSpot list 3. **Link Establishment**: Creates sync relationship between the lists **Ongoing Sync:** - **Scheduled updates** when members are added/removed in Quotient - **Batch processing** for large membership changes - **Error handling** for contacts that don't exist in HubSpot ### Requirements for Outbound Sync **Contact Requirements:** - All list members must have email addresses - Contacts should exist in HubSpot or be syncable to HubSpot - Email addresses must be valid and not suppressed **HubSpot Permissions:** - Write access to HubSpot lists - Contact creation permissions (if creating new contacts) - Appropriate HubSpot plan with list functionality ## Managing List Sync ### Enabling List Synchronization 1. **Navigate** to HubSpot integration settings and go to the **Person** tab 2. **View the List Sync section** to see available list synchronization options
HubSpot Person sync settings showing List Sync section with available lists
3. **Click "Enable Sync"** to activate list synchronization for the Person object
Enable Sync button for HubSpot list synchronization
### Monitoring List Sync Monitor your list synchronization through the **Jobs** tab in the HubSpot settings:
HubSpot Jobs tab showing list sync job history with progress and status
**Job Monitoring Features:** - **Job History**: View all list sync jobs that have been executed - **Progress Tracking**: Monitor sync progress with detailed progress bars - **Job Status**: See which jobs are completed, running, or failed - **Execution Details**: View start times, duration, and record counts - **Object Types**: See what type of lists each job synchronized ### List Sync Details You can also view detailed information about individual list sync operations:
Detailed view of HubSpot list sync showing individual list status and member counts
**Sync Logs:** - **Member changes**: Detailed log of additions/removals - **Conflict resolution**: How conflicts were resolved - **Error details**: Specific errors for failed operations ### Troubleshooting List Issues **Lists Not Syncing:** - Verify contact sync is enabled and working - Check that lists contain contacts with email addresses - Review HubSpot permissions for list access **Member Mismatches:** - Ensure email addresses match between systems - Check for suppressed or invalid email addresses - Review contact sync status for list members **Sync Conflicts:** - Review conflict resolution logs - Check for simultaneous changes in both systems - Verify network connectivity during sync operations ## Best Practices ### List Organization Strategy **Use Dynamic Lists For:** - Automated segmentation based on contact properties - Lifecycle stage management - Behavioral targeting (page views, email engagement) - Lead scoring and qualification **Use Static Lists For:** - Event attendees and registrations - Import lists from external sources - One-time campaign targets - Manual curation and suppression lists ### Naming Conventions **Consistent Naming:** - Use descriptive names that indicate the list purpose - Include date ranges for time-sensitive lists - Use prefixes to group related lists (e.g., "Event*", "Campaign*") **Avoid Conflicts:** - Check for existing list names before creating new ones - Use unique identifiers for similar lists - Consider slug generation when naming lists ### Performance Optimization **Large Lists:** - Monitor sync performance for lists with >10,000 members - Consider breaking very large lists into smaller segments - Use batch operations for bulk membership changes **Sync Frequency:** - Rely on daily automatic sync for regular updates - Use manual sync when immediate updates are needed - Monitor sync performance in the integration dashboard ## Next Steps Once you've configured list synchronization: 1. **[Set Up Email Sync](/docs/hubspot/email-sync)** - Sync email templates and broadcasts 2. **[Monitor Performance](/docs/hubspot/troubleshooting)** - Track sync operations and optimize performance 3. **[Advanced Workflows](/docs/flow)** - Use synced lists in Quotient automation flows --- **HubSpot Help Resources:** - [HubSpot Lists Guide](https://knowledge.hubspot.com/lists) - Complete guide to HubSpot lists - [Creating Lists in HubSpot](https://knowledge.hubspot.com/lists/create-active-or-static-lists) - Step-by-step list creation - [Managing Your Lists](https://knowledge.hubspot.com/lists/manage-your-lists) - List management best practices -- End of: /hubspot/lists -- Start of: /hubspot/objects --- title: Object Synchronization description: Configure which HubSpot objects sync with Quotient and understand sync behavior order: 2 --- ## Overview Quotient's HubSpot integration supports synchronization of multiple object types, each with specific capabilities and sync directions. This page explains how to enable and configure object synchronization to meet your business needs. ## Supported Objects ### Contacts ↔ People (Bi-directional) HubSpot contacts sync with Quotient people, maintaining a complete bi-directional relationship. **Key Features:** - **Full bi-directional sync** - changes in either system update the other - **Email-based matching** - contacts are matched by email address - **Company associations** - maintains relationships between contacts and companies - **Custom properties** - supports all HubSpot contact property types **What Gets Synced:** - Basic contact information (name, email, phone, job title) - Company associations and relationships - Custom properties and fields - Contact owner assignments - Lifecycle stage and lead status

Email Subscription Status

Contacts synced from HubSpot are initially set to "NOT_SUBSCRIBED" for email marketing in Quotient. You'll need to manage email preferences separately or use Quotient's double opt-in process.

### Companies (Bi-directional) HubSpot companies sync with Quotient companies, including complex data like addresses and revenue information. **Key Features:** - **Bi-directional sync** with intelligent conflict resolution - **Address parsing** - HubSpot address fields are decomposed into structured data - **Revenue handling** - supports multiple currencies and revenue tracking - **Industry categorization** - maps HubSpot industry fields to Quotient categories **What Gets Synced:** - Company name and description - Complete address information (street, city, state, zip, country) - Revenue and employee count - Industry and company type - Website and social media links - Custom company properties ### Deals (Inbound Only) HubSpot deals are imported into Quotient for reporting and campaign attribution, but changes in Quotient don't sync back to HubSpot. **Key Features:** - **Read-only sync** from HubSpot to Quotient - **Deal stage tracking** - maintains HubSpot pipeline and stage information - **Revenue attribution** - connects deals to marketing campaigns and activities - **Company associations** - links deals to their associated companies **What Gets Synced:** - Deal name and description - Deal amount and currency - Pipeline and stage information - Close date and probability - Associated company and contacts - Deal owner and team assignments

Why Deals Are Read-Only

Deals remain read-only in Quotient to maintain HubSpot as the authoritative source for sales pipeline data. This prevents conflicts and ensures your sales team continues to manage deals in their familiar HubSpot environment.

## Enabling Object Sync ### Step 1: Access HubSpot Settings 1. Navigate to **Settings** → **Integrations** → **HubSpot** 2. Click the **Settings** button on your connected HubSpot integration 3. You'll be taken to the HubSpot settings page with tabs for each object type you can sync
HubSpot integration settings page showing Settings button and connected status
### Step 2: Configure Object Sync In the HubSpot settings page, you'll see tabs for each available object type: - **Person** tab - Configure HubSpot contacts sync with Quotient people - **Company** tab - Configure company information sync (bi-directional) - **Deal** tab - Configure HubSpot deals import (read-only) - **Email** tab - Configure email template and broadcast sync - **Jobs** tab - View and manage sync jobs and status Click on each tab to enable and configure the sync settings for that object type.
HubSpot object sync configuration showing tabs and enable sync button
### Step 3: Understand Dependencies Some objects have dependencies that are automatically managed: **Lists & Segments** → **Contacts** - Enabling Lists automatically enables Contacts sync - Disabling Contacts automatically disables Lists sync - This ensures list memberships can be properly maintained ### Step 4: Save and Sync 1. Click **Save Preferences** to apply your changes 2. Quotient will automatically trigger a sync for newly enabled objects 3. Monitor progress in the sync status dashboard ## Sync Behavior & Timing ### Initial Sync When you first enable an object type: 1. **Full Import**: All existing records are imported from HubSpot 2. **Batch Processing**: Large datasets are processed in batches of 50 records 3. **Progress Tracking**: Real-time progress updates in the integration dashboard 4. **Completion Notification**: Email notification when sync completes ### Ongoing Synchronization After the initial sync, objects are kept in sync through: **Daily ETL Process** - Runs every night at midnight - Processes all changes from the last 24 hours - Handles bulk updates and data consistency checks **Scheduled Updates** - Regular synchronization during daily sync cycles - Processes record changes during scheduled runs - Maintains data consistency across platforms **Manual Sync** - On-demand synchronization available in settings - Useful for testing or immediate updates - Processes all enabled objects ## Advanced Configuration ### Sync Direction Control While most objects support bi-directional sync, you can control sync behavior through field mappings: - **Inbound Only**: Data flows from HubSpot to Quotient only - **Outbound Only**: Data flows from Quotient to HubSpot only - **Bi-directional**: Changes in either system update the other ### Conflict Resolution When the same record is updated in both systems: 1. **Timestamp Comparison**: Most recent change wins 2. **Field-Level Resolution**: Different fields can have different winners 3. **Manual Override**: Some conflicts require manual resolution 4. **Audit Trail**: All sync conflicts are logged for review ### Performance Optimization For large HubSpot accounts: - **Selective Sync**: Only enable objects you actively use in Quotient - **Field Filtering**: Limit synced fields to reduce processing time - **Batch Size Tuning**: Automatic optimization based on account size - **Rate Limiting**: Respects HubSpot API limits to prevent throttling ## Monitoring & Troubleshooting ### Sync Jobs Monitoring Monitor your object synchronization through the **Jobs** tab in the HubSpot settings: - **Job History**: View all sync jobs that have been executed - **Job Status**: See which jobs are completed, running, or failed - **Progress Tracking**: Monitor sync progress with detailed progress bars - **Execution Details**: View start times, duration, and record counts for each job - **Object Types**: See what type of data each job synchronized (Person, Company, List, etc.)
HubSpot Jobs tab showing sync job history with status, progress, and execution details
### Common Issues **Records Not Syncing** - Verify the object type is enabled in sync preferences - Check that records meet sync criteria (e.g., have email addresses for contacts) - Review field mapping configuration for required fields **Slow Sync Performance** - Large datasets may take time for initial sync - Consider enabling only essential objects initially - Check HubSpot API rate limits in the dashboard **Data Inconsistencies** - Review conflict resolution logs - Verify field mappings are configured correctly - Check for data type mismatches between systems ## Next Steps Once you've configured object synchronization: 1. **[Set Up Field Mappings](/docs/hubspot/field-mappings)** - Customize how data maps between systems 2. **[Configure Lists & Segments](/docs/hubspot/lists)** - Set up list synchronization 3. **[Enable Email Sync](/docs/hubspot/email-sync)** - Sync email templates and broadcasts --- **HubSpot Help Resources:** - [HubSpot Knowledge Base](https://knowledge.hubspot.com/) - Official help articles - [Managing Contacts in HubSpot](https://knowledge.hubspot.com/contacts) - Contact management guides - [Working with Companies](https://knowledge.hubspot.com/companies) - Company record help - [HubSpot Deals Guide](https://knowledge.hubspot.com/deals) - Deal management resources -- End of: /hubspot/objects -- Start of: /hubspot/setup --- title: Setup & Configuration description: Connect your HubSpot account to Quotient and configure basic sync settings order: 1 --- ## Prerequisites Before setting up the HubSpot integration, ensure you have: - **HubSpot Account**: A HubSpot account with appropriate permissions - **Admin Access**: Administrative access to your HubSpot portal to authorize the integration - **Quotient Business**: An active Quotient business account ### Required HubSpot Permissions The integration requires the following HubSpot scopes: - **CRM Objects**: Read/write access to contacts, companies, and deals - **Lists**: Read/write access to contact lists - **Custom Properties**: Access to create and manage custom properties - **Marketing Email** (optional): For email sync functionality ## Connecting Your HubSpot Account ### Step 1: Navigate to Integrations 1. In your Quotient workspace, go to **[Integrations](/s/most-recent-business/integrations)** 2. Find the **HubSpot** integration card 3. Click **Connect** to begin the setup process
Quotient integrations page showing HubSpot integration card with Connect button
### Step 2: Authorize with HubSpot 1. You'll be redirected to HubSpot's authorization page 2. **Select your HubSpot portal** if you have access to multiple accounts 3. **Review the permissions** that Quotient is requesting 4. Click **Grant access** to authorize the integration
HubSpot OAuth authorization page showing portal selection and permission scopes

Secure Connection

Quotient uses secure authentication to connect with HubSpot. You'll be redirected to HubSpot's official login page to authorize the connection, ensuring your credentials remain safe.

### Step 3: Review Permissions After authorizing with HubSpot, you'll be redirected back to Quotient where you can review the permissions that were granted:
Quotient OAuth permissions confirmation page showing granted HubSpot permissions
### Step 4: Verify Connection After authorization, you'll be redirected back to Quotient where you should see: - ✅ **Connection Status**: "Connected" with your HubSpot portal name - 📊 **Account Info**: Your HubSpot portal ID and connected user - 🔧 **Available Features**: List of enabled capabilities based on your HubSpot plan
Quotient HubSpot integration dashboard showing successful connection status and available features
## Initial Configuration ### Sync Preferences By default, **all sync options are disabled** to give you full control over what data is synchronized. You'll need to explicitly enable the objects you want to sync. #### Available Sync Options
Object Type Description Dependencies
Contacts → People Sync HubSpot contacts as Quotient people None
Companies Sync HubSpot companies with Quotient None
Deals Import HubSpot deals (read-only) None
Lists & Segments Sync HubSpot lists and dynamic segments Requires Contacts sync
#### Enabling Sync Options 1. In the HubSpot integration settings, toggle on the objects you want to sync 2. **Smart Dependencies**: Enabling Lists automatically enables Contacts sync (required dependency) 3. **Confirmation**: Review your selections and click **Save Preferences**
HubSpot sync preferences panel with toggles for Contacts, Companies, Deals, and Lists showing disabled state
### First Sync After enabling sync preferences, Quotient will automatically trigger an initial synchronization: 1. **ETL Process**: A background job will start importing your HubSpot data 2. **Progress Tracking**: Monitor sync progress in the integration dashboard 3. **Completion**: You'll receive a notification when the initial sync completes

Initial Sync Duration

The initial sync duration depends on the amount of data in your HubSpot account. Large datasets may take several hours to complete. You can continue using Quotient while the sync runs in the background.

## Sync Schedule & Updates ### Automated Sync Schedule - **Daily Automatic Sync**: Complete synchronization runs every night at midnight - **Manual Sync**: On-demand synchronization available in the integration settings - **Background Processing**: Continuous monitoring and progress tracking ### How Updates Work Quotient keeps your data synchronized through scheduled processes. Changes made in HubSpot will appear in Quotient after the next sync cycle: - New contacts, companies, and deals are imported during daily sync - Modified information is updated during scheduled sync runs - List membership changes are processed automatically - You can trigger manual sync for immediate updates when needed ## Verification & Testing ### Verify Your Setup After the initial sync completes, verify everything is working correctly: 1. **Check Data**: Review synced contacts, companies, and deals in Quotient 2. **Test Updates**: Make a small change in HubSpot and verify it appears in Quotient 3. **Review Mappings**: Ensure field mappings are working as expected ### Common Setup Issues **Connection Failed** - Verify you have admin permissions in HubSpot - Check that your HubSpot plan includes the required features - Ensure popup blockers aren't preventing the OAuth flow **No Data Syncing** - Confirm sync preferences are enabled for the desired objects - Check that the initial ETL job completed successfully - Verify your HubSpot account contains data to sync **Missing Fields** - Review field mappings in the integration settings - Ensure custom properties exist in both systems - Check data type compatibility between systems ## Next Steps Once your HubSpot integration is connected and syncing: 1. **[Configure Object Sync](/docs/hubspot/objects)** - Fine-tune which objects are synchronized 2. **[Set Up Field Mappings](/docs/hubspot/field-mappings)** - Customize how data maps between systems 3. **[Enable Email Sync](/docs/hubspot/email-sync)** - Sync email templates and broadcasts 4. **[Configure Lists](/docs/hubspot/lists)** - Set up list and segment synchronization --- **Need Help?** If you encounter issues during setup, check our [troubleshooting guide](/docs/hubspot/troubleshooting) or contact support. -- End of: /hubspot/setup -- Start of: /hubspot/troubleshooting --- title: Troubleshooting HubSpot Integration description: Resolve common issues with your HubSpot integration order: 6 --- ## Common Issues & Solutions ### Connection & Authentication Issues #### Integration Connection Failed **Symptoms:** - Unable to connect to HubSpot during setup - "Authorization failed" error messages - Redirect loops during OAuth flow **Solutions:** 1. **Check HubSpot Permissions** - Ensure you have admin access to the HubSpot portal - Verify your user account has integration management permissions - Confirm the HubSpot plan includes required features 2. **Browser & Network Issues** - Disable popup blockers for Quotient and HubSpot domains - Clear browser cache and cookies - Try the connection process in an incognito/private window - Check for corporate firewall restrictions 3. **Multiple HubSpot Accounts** - Ensure you're logged into the correct HubSpot portal - Log out of other HubSpot accounts before connecting - Use a dedicated browser session for the integration setup #### Token Refresh Failures **Symptoms:** - "Invalid token" errors in sync logs - Intermittent sync failures - Authentication errors after initial setup **Solutions:** 1. **Reconnect Integration** - Go to **[HubSpot integration settings](/s/most-recent-business/integrations/hubspot)** - Click "Reconnect" to refresh OAuth tokens - Complete the authorization flow again 2. **Check HubSpot App Status** - Verify the Quotient app is still installed in HubSpot - Check app permissions haven't been revoked - Review HubSpot's connected apps settings ### Data Sync Issues #### Records Not Syncing **Symptoms:** - New HubSpot contacts don't appear in Quotient - Changes in one system don't reflect in the other - Sync dashboard shows no recent activity **Troubleshooting Steps:** 1. **Verify Sync Preferences** ``` ✓ Check that object sync is enabled for the affected type ✓ Confirm sync direction allows the desired data flow ✓ Verify dependencies (e.g., Lists requires Contacts) ``` 2. **Check Data Requirements** - **Contacts**: Must have valid email addresses - **Companies**: Must have a name - **Lists**: Must contain contacts with email addresses 3. **Review Sync Logs** - Check the integration dashboard for error messages - Look for rate limiting or API quota issues - Verify network connectivity during sync windows 4. **Manual Sync Test** - Trigger a manual sync for the affected object type - Monitor progress in real-time - Check if specific records are causing failures #### Field Mapping Issues **Symptoms:** - Data appears in one system but not the other - Field values are incorrect or truncated - Custom properties not syncing **Solutions:** 1. **Verify Field Mappings** - Check that mappings exist for the affected fields - Ensure data types are compatible between systems - Verify sync direction allows the desired data flow 2. **Data Type Compatibility** ``` HubSpot Text → Quotient STRING ✓ HubSpot Number → Quotient STRING ✗ (use NUMBER) HubSpot Date → Quotient DATETIME ✗ (use DATE) ``` 3. **Custom Property Setup** - Ensure custom properties exist in both systems - Check property permissions and visibility - Verify property names match exactly in mappings #### Duplicate Records **Symptoms:** - Multiple records for the same person/company - Sync conflicts between similar records - Data inconsistencies across systems **Prevention & Resolution:** 1. **Email-Based Deduplication** - Ensure all contacts have unique, valid email addresses - Clean up duplicate emails in HubSpot before syncing - Use HubSpot's built-in deduplication tools 2. **Company Matching** - Verify company names are consistent between systems - Use domain-based matching where possible - Manually merge duplicates in both systems 3. **Sync Conflict Resolution** - Review conflict resolution logs in the integration dashboard - Understand timestamp-based conflict resolution - Manually resolve conflicts that require business logic ### List & Segment Sync Issues #### Lists Not Creating in Quotient **Symptoms:** - HubSpot lists don't appear in Quotient - List sync shows errors or warnings - Empty lists in Quotient despite HubSpot membership **Solutions:** 1. **Check List Requirements** - Verify the list contains contacts with email addresses - Ensure list members are also synced as contacts - Check that list sync is enabled in preferences 2. **List Type Compatibility** - **Dynamic lists** → Quotient segments (inbound only) - **Static lists** → Quotient lists (bi-directional) - Verify the list type matches expected behavior 3. **Member Sync Dependencies** - Ensure contact sync is enabled and working - Check that list members exist in Quotient - Review member email address validity #### Bi-directional List Sync Conflicts **Symptoms:** - Members added in one system don't appear in the other - Sync conflicts for list membership - Inconsistent member counts between systems **Solutions:** 1. **Conflict Resolution Strategy** - Understand that most recent change wins - Avoid simultaneous changes in both systems - Use manual sync to resolve immediate conflicts 2. **Member Email Matching** - Ensure members have matching email addresses - Check for email format differences (case, spacing) - Verify email addresses are not suppressed ### Email Sync Issues #### Template Creation Failed **Symptoms:** - "Template setup failed" error messages - Missing `quotient-base.html` template in HubSpot - Email sync toggle won't enable **Solutions:** 1. **HubSpot Plan Verification** - Confirm Marketing Hub Starter or higher plan - Verify marketing email API access is included - Check Design Manager permissions 2. **Template Setup Process** - Try the automated template setup again - Manually verify template creation in HubSpot Design Manager - Check for template naming conflicts 3. **Permission Issues** - Ensure integration has content and marketing-email scopes - Verify user permissions for Design Manager access - Check HubSpot app installation status #### Email Content Not Displaying **Symptoms:** - Blank emails in HubSpot - Content not injecting into template - Formatting issues in synced emails **Solutions:** 1. **Template Validation** - Verify `quotient-base.html` contains required modules - Check for template modifications that break injection - Test template with sample content 2. **Content Format Issues** - Review HTML compatibility with HubSpot - Check for unsupported CSS or JavaScript - Verify image URLs are accessible ### Performance & Rate Limiting #### Slow Sync Performance **Symptoms:** - Sync operations take hours to complete - Timeouts during large data imports - Delayed sync completion **Optimization Strategies:** 1. **Selective Sync** - Only enable objects you actively use in Quotient - Disable unused custom property mappings - Focus on essential data for initial sync 2. **Batch Size Optimization** - Allow automatic batch size adjustment - Monitor sync performance metrics - Consider breaking large datasets into phases 3. **Timing Optimization** - Schedule manual syncs during off-peak hours - Avoid simultaneous large operations - Rely on daily automatic sync for regular updates #### API Rate Limiting **Symptoms:** - "Rate limit exceeded" errors in sync logs - Sync operations failing intermittently - Delayed sync completion **Solutions:** 1. **Rate Limit Management** - Monitor API usage in integration dashboard - Spread sync operations across time - Use HubSpot's rate limit headers for optimization 2. **Sync Frequency Adjustment** - Reduce manual sync frequency - Rely on scheduled daily sync for bulk updates - Allow automatic sync processes to handle regular updates ## Best Practices ### Data Management #### Maintain Data Quality **Before Syncing:** - Clean up duplicate records in HubSpot - Standardize data formats (phone numbers, addresses) - Validate email addresses and remove invalid ones - Ensure required fields are populated **Ongoing Maintenance:** - Regularly review sync logs for errors - Monitor data consistency between systems - Set up alerts for sync failures - Perform periodic data audits #### Field Mapping Strategy **Default Mappings:** - Start with Quotient's default field mappings - Only customize mappings when necessary - Document custom mapping decisions - Test mappings with sample data before full deployment **Custom Properties:** - Use consistent naming conventions between systems - Choose appropriate data types for each field - Avoid overly complex custom property structures - Plan for future scalability ### Sync Configuration #### Object Sync Strategy **Phased Approach:** 1. **Phase 1**: Enable Contacts sync only 2. **Phase 2**: Add Companies after contact sync stabilizes 3. **Phase 3**: Enable Lists and Segments 4. **Phase 4**: Add Deals and Email sync **Selective Enablement:** - Only sync objects you'll actively use in Quotient - Consider data volume and sync performance - Plan for future growth and additional objects #### Performance Optimization **Large Datasets:** - Expect longer initial sync times for large HubSpot accounts - Monitor sync progress and performance metrics - Consider data archiving for very old records - Use HubSpot's data export tools for historical analysis **Sync Strategy:** - Rely on daily automatic sync for comprehensive updates - Use manual sync only when immediate updates are needed - Schedule intensive operations during off-peak hours - Allow background processes to handle regular synchronization ### Monitoring & Maintenance #### Proactive Monitoring **Daily Checks:** - Review sync status dashboard - Monitor error rates and performance metrics - Check for failed sync operations - Verify sync scheduling and automation **Weekly Reviews:** - Analyze sync performance trends - Review data consistency reports - Check for new error patterns - Update field mappings as needed #### Maintenance Schedule **Monthly Tasks:** - Review and clean up sync logs - Update custom field mappings - Audit data quality across systems - Test disaster recovery procedures **Quarterly Reviews:** - Assess integration performance and ROI - Review and update sync preferences - Plan for new feature adoption - Conduct security and compliance audits --- **Need Help?** Check the [HubSpot Knowledge Base](https://knowledge.hubspot.com/) for additional HubSpot-specific guidance, or contact support if issues persist. -- End of: /hubspot/troubleshooting -- Start of: /mcp/github-private-repos --- title: Accessing Private GitHub Repositories description: Use a personal access token to give Quotient read access to private repos via the GitHub MCP server order: 1 --- The GitHub MCP connection in the marketplace uses OAuth to connect through Quotient's GitHub App. This works well for public repositories, but GitHub's hosted MCP server does not surface private repositories or organization repositories through this OAuth flow. Since the most common reason to connect GitHub is to work with private repos — drafting changelogs from commits, summarizing PRs, writing release notes — this is a meaningful limitation. The workaround is straightforward: create a GitHub personal access token (PAT) and connect the GitHub MCP server as a custom server using that token. Quotient will authenticate as you through the PAT and will be able to see any repo the token has access to. ## Step 1: Create a Personal Access Token GitHub offers two types of personal access tokens: **fine-grained tokens** (recommended) and **classic tokens**. Both work with this setup. Fine-grained tokens are more precise and let you restrict access to specific repositories; classic tokens are simpler to configure. Go to [GitHub > Settings > Developer settings > Personal access tokens](https://github.com/settings/tokens) to create one. ### A note on read-only access A personal access token essentially lets Quotient authenticate to GitHub on your behalf, with whatever permissions the token carries. **We strongly recommend keeping your token read-only.** Quotient's primary use case for GitHub is reading commits, pull requests, and diffs to generate content — it does not need write access for this. We do not document write-scope configurations here. If you have a specific use case that requires write access (for example, having Quotient open PRs or create issues), reach out to us and we can help you configure appropriate scopes. ### Fine-grained token (recommended) Fine-grained tokens let you limit access to specific repositories and grant only the permissions you need. When creating the token, configure the following: - **Resource owner:** Your personal account, or the GitHub organization that owns the repositories you want Quotient to access. If you select an organization, the org may need to approve the token before it becomes active. - **Repository access:** Select **Only select repositories** and choose the repos you want Quotient to be able to read, or select **All repositories** if you want broad access across your account or org. - **Permissions:** Under Repository permissions, set the following to **Read-only**: - **Contents** — required to read files, commits, and diffs - **Metadata** — required for basic repo info (always read-only, enabled automatically) - **Pull requests** — required to read PR descriptions and diffs ### Classic token Classic tokens are scoped by category rather than individual permission. When creating the token, select: - **`repo`** — grants full access to repositories, but within the `repo` scope, you are not able to request read-only on its own. This is a known limitation of classic tokens. If fine-grained tokens are an option for you, they are preferable because they allow true read-only access. If you are connecting Quotient to an organization's repositories, you may also need: - **`read:org`** — allows Quotient to read organization membership and repository lists within the org Do not select any write or admin scopes. Leave all other checkboxes unchecked. ## Step 2: Connect as a Custom MCP Server Once you have your token, go to **[Settings > MCP Servers](/s/most-recent-business/settings/mcp-servers)** and click **Custom Server** at the bottom of the marketplace list. Configure the server with the following: - **URL:** `https://api.githubcopilot.com/mcp/` - **Authentication:** API Key - **Token:** Paste your personal access token Save the connection. Quotient will immediately be able to use the GitHub MCP tools with the permissions carried by your token. ## What Happens Next Once connected, Quotient can read any repository that your token has access to. You can ask it to summarize recent commits, compare branches, draft a changelog from merged PRs, or pull context from a specific file — all without leaving Quotient. If you need to rotate or revoke the token at any point, generate a new one in GitHub, then update the custom server in Quotient's settings with the new value. -- End of: /mcp/github-private-repos -- Start of: /mcp/index --- title: MCP Connections description: Extend Quotient by connecting external tools and data sources order: 750 --- MCP (Model Context Protocol) is an open standard that extends the capabilities of Quotient's agent by giving it access to other systems. When you connect an MCP server to Quotient, you're giving it a set of **tools** it can call during conversations — for example, the ability to look up GitHub pull requests, pull SEO data from Ahrefs, or read documents from Notion. You can think of it like a universal adapter: once a tool supports MCP, any AI application (including Quotient) can plug into it. Thousands of applications now offer MCP servers, and connecting one to Quotient takes just a few clicks. **A note on how this differs from Quotient's built-in integrations.** MCP connections give Quotient tools it can use during conversations — it's like handing a coworker a login to another app. Built-in integrations like your CRM or Slack are more deeply embedded into the platform. Your CRM integration doesn't just give Quotient a tool to call; it continuously syncs your customer data so it can power audience segments, personalization, and reporting. The Slack integration lets you talk to Quotient without leaving your workspace. MCP connections, by contrast, extend what Quotient's agent can do in a conversation, and nothing more. ## What You Can Do with MCP Here are some of the most common ways Quotient customers use MCP connections today. **Bridge the gap between product and marketing.** Connect Linear or GitHub so Quotient can read issues, pull requests, and commit history. This is incredibly useful for product marketing — instead of waiting for engineering to write up release notes or explain what shipped, you can ask Quotient to look at the last sprint's PRs and draft a changelog, blog post, or launch email. It saves a huge amount of back-and-forth between teams. **Inform campaigns with SEO data.** Connect Ahrefs or Semrush and ask Quotient to pull keyword research, competitor analysis, or backlink data while you're planning a campaign. Instead of switching between tabs and copy-pasting data, you can have a conversation: "What keywords are we ranking for in the enterprise analytics space?" and Quotient will look it up and factor the results into its recommendations. **Give Quotient access to your company knowledge.** Many teams keep important context in Notion — product briefs, competitive intel, messaging frameworks, onboarding docs. Connecting Notion lets Quotient read those documents directly, which means it can draw on that context when writing content or making strategic recommendations. You can even ask Quotient to read specific Notion pages and save the key points as memories for future conversations. ## Connecting an MCP Server Navigate to **[Settings > MCP Servers](/s/most-recent-business/settings/mcp-servers)** to see the list of available connections. The marketplace shows all supported providers — just click one to begin the connection process. Most providers use OAuth, so you'll be redirected to authorize Quotient's access and then sent back to the settings page once the connection is established. Once connected, you don't need to do anything special to use it. Quotient automatically discovers the tools that each connected server provides and will use them when relevant. If you ask Quotient something that one of your connected tools can help with, it will reach for it naturally. You can disconnect a server at any time from the same settings page using the menu on each connected provider. If a connection stops working (for example, if you revoked access on the provider's side), you can use the **Reconnect** option in the same menu to re-authorize without removing and re-adding the server. ## Custom MCP Servers The marketplace covers the most popular tools, but MCP is an open standard — thousands of applications and services now offer MCP servers. If you want to connect something that isn't in the marketplace, you can add it as a custom server. To add a custom server, click **Custom Server** at the bottom of the marketplace list. You'll need to provide the server's URL and choose an authentication method. **OAuth** is the most common authentication method for MCP servers. When you choose OAuth, Quotient will redirect you to the service's login page to authorize access — the same flow you'd use when connecting a marketplace provider. Most major SaaS tools that offer MCP servers support OAuth. **API Key** authentication is the alternative. Some MCP servers require you to generate an API key or token in their settings and provide it to Quotient directly. If you're connecting a server that uses API keys, you'll typically find instructions for generating one in that service's documentation, usually under a section called "API Keys," "Tokens," or "Developer Settings." If you're not sure which authentication method to use, check the documentation for the MCP server you're trying to connect — it will tell you what's supported. OAuth is generally the simpler option when available, since you don't need to manage any keys yourself. -- End of: /mcp/index -- Start of: /sdk/analytics --- title: Analytics description: Track page views, searches, and other user interactions with the Quotient analytics API order: 4 --- ## Overview The analytics API tracks user interactions on your site. Events are sent via the [Beacon API](https://developer.mozilla.org/en-US/docs/Web/API/Beacon_API) by default for reliability during page unloads. All events automatically include timestamp, device ID, session ID, browser fingerprint, person ID (if identified), and client context. | Endpoint | API Key | Server SDK | Client SDK | |---|---|---|---| | Track event | public or private | `analytics.event()` | `analytics.event()` | ## Track Event #### `analytics.event(params)` > `POST /api/v0/analytics` > > **Auth:** public or private key · scope: `ANALYTICS_WRITE` | Param | Type | Required | Description | |---|---|---|---| | `eventType` | `"pageView" \| "search"` | Yes | Type of event to track | | `searchQuery` | `string` | For search events | The search query string | | `pathname` | `string` | No | Defaults to `window.location.pathname` | | `pageUrl` | `string` | No | Defaults to `window.location.href` | ```typescript // Page view await client.analytics.event({ eventType: "pageView", }); // Search await client.analytics.event({ eventType: "search", searchQuery: "winter jackets", }); ``` **Returns:** `void` ## Auto-Tracking with React The easiest way to track page views is to enable auto-tracking on the `QuotientProvider`. This tracks a page view on mount automatically. ```tsx ``` See the [React SDK](/docs/sdk/react) article for full provider setup. For manual tracking, use `client.analytics.event()` via the `useQuotient()` hook. ## Common Patterns ### Debounced Search Tracking ```javascript import { debounce } from "lodash"; const trackSearch = debounce(async (query) => { if (query.length > 2) { await client.analytics.event({ eventType: "search", searchQuery: query, }); } }, 500); function SearchBar() { const handleSearch = (e) => { const query = e.target.value; setSearchQuery(query); trackSearch(query); performSearch(query); }; return ; } ``` ### Page View Tracking in a SPA If you're not using the React SDK's `autoTrackPageViews`, you can track route changes manually: ```javascript import { useEffect } from "react"; import { useLocation } from "react-router-dom"; import { useQuotient } from "@quotientjs/react"; function PageTracker() { const location = useLocation(); const { client } = useQuotient(); useEffect(() => { client?.analytics.event({ eventType: "pageView", pathname: location.pathname, pageUrl: window.location.href, }); }, [location, client]); return null; } ``` ## Next Steps -- End of: /sdk/analytics -- Start of: /sdk/api-keys --- title: API Keys description: Understanding and managing API keys for Quotient order: 1 --- API keys are the primary authentication mechanism for accessing the Quotient API. This guide covers the different key types, their use cases, and how to set them up correctly. ## Key Types Quotient uses a two-tier API key system designed for different security contexts: ### Public Keys (`pk_*`) Public keys are designed for **client-side applications** where the key is exposed in browser code or mobile apps. **Characteristics:** - Prefix: `pk_` - Length: 20-40 characters after prefix - Safe to expose in client-side code - Limited set of scopes supported - Origin-restricted for security - Cannot access sensitive operations **Allowed Endpoints:** - `POST /api/v0/analytics` - Track events - `POST /api/v0/audience/people` - Upsert people - `POST /api/v0/audience/companies` - Upsert companies - `POST /api/v0/audience/lists/:slug/people` - Add people to a list - `DELETE /api/v0/audience/lists/:slug/people` - Remove people from a list - `GET /api/v0/blog/*` - Retrieve blogs, authors, and tags - `POST /api/v0/flow/:id/trigger` - Trigger a programmatic flow - `GET /api/v0/whoami` - Verify key configuration and get client context **Use Cases:** - Integrating signup forms with Quotient - Centralizing client-side analytics - Publishing blogs and content managed by Quotient on your website - Triggering flows from your frontend ### Private Keys (`sk_*`) Private keys are for **server-side applications** where the key can be kept secret. **Characteristics:** - Prefix: `sk_` - Length: 20-40 characters after prefix - Must be kept secret - Full support for all scopes - IP address restrictions (coming soon) **Use Cases:** - Server-to-server integrations - Backend services - Data imports/exports - Administrative operations > **Security Warning**: Never expose private keys in client-side code, version control, or public repositories. ## Key Security Features ### Origin Restrictions (Public Keys) Public keys can be restricted to specific origins to prevent unauthorized use if the key is stolen. **How it works:** 1. The API checks the `Origin` header of incoming requests 2. Compares against the allowed origins list 3. Rejects requests from unauthorized origins **Origin formats supported:** - **Wildcard**: `*` - Allow any origin (not recommended for production) - **Domain**: `example.com` - Matches example.com and all subdomains - **Subdomain**: `app.example.com` - Matches only this specific subdomain - **With protocol**: `https://app.example.com` - Matches exact protocol and domain - **With port**: `localhost:3000` - Matches localhost on specific port **Examples:** ``` ✅ Valid origins: - example.com - app.example.com - subdomain.example.com - localhost:3000 - https://app.example.com:8080 ❌ Invalid origins: - http:// (protocol only) - :3000 (port only) - .com (TLD only) ``` **Matching rules:** - `example.com` matches: - `https://example.com` - `https://www.example.com` - `https://app.example.com` - `app.example.com` matches only: - `https://app.example.com` - `http://app.example.com` ### Scopes API keys support granular permission scopes. When creating a key, you assign one or more scopes to limit what it can access. Scopes are required — there is no implicit "full access" default; choose the smallest set your integration needs. | Scope | Description | |---|---| | `ANALYTICS_READ` | Read analytics data | | `ANALYTICS_WRITE` | Track events | | `AUDIENCE_PERSON_READ` | Read people | | `AUDIENCE_PERSON_WRITE` | Create and update people | | `AUDIENCE_COMPANY_READ` | Read companies | | `AUDIENCE_COMPANY_WRITE` | Create and update companies | | `AUDIENCE_LIST_READ` | Read lists and list members | | `AUDIENCE_LIST_WRITE` | Create and update lists, add and remove members | | `BLOG_READ` | Read blogs, authors, and tags | | `BLOG_WRITE` | Create and update blog content | | `FLOW_TRIGGER` | Trigger programmatic flows | | `MEMORY_READ` | Read memory documents | | `MEMORY_WRITE` | Create and update memory documents | ### Key Expiration Keys can have optional expiration dates for temporary access: - Useful for trials or time-limited integrations - Automatically rejected after expiration - No impact on existing data ### Usage Tracking Each key tracks: - **Last used**: Timestamp of most recent API call - **Created at**: When the key was generated - **Created by**: User who created the key ## Creating API Keys ### Via Dashboard For now, you can only create public keys via the dashboard. 1. Navigate to **[Settings → Developers](/s/most-recent-business/settings/developers)** in your business dashboard 2. Click **"Create API Key"** 3. Configure the key: - **Name**: Descriptive identifier (e.g., "Production Web App") - **Description**: Optional details about usage - **Allowed Origins**: Domains that can use this key ### Best Practices for Key Creation #### Security Recommendations 1. **Principle of Least Privilege** - Create separate keys for different environments - Use the most restrictive origin settings possible 2. **Origin Restrictions** - Never use `*` (wildcard) in production - Be specific with subdomains - Include ports when necessary ## Using API Keys ### In Requests Include the API key in the `Authorization` header: ```bash curl -X POST https://api.quotient.com/api/v0/analytics \ -H "Authorization: Bearer pk_test_1234567890abcdef" \ -H "Content-Type: application/json" \ -d '{"eventType": "pageView"}' ``` ### With SDKs ```javascript // JavaScript SDK const quotient = await QuotientClient.init({ apiKey: 'pk_test_1234567890abcdef' }); // React SDK ``` ## Next Steps -- End of: /sdk/api-keys -- Start of: /sdk/audience --- title: Audience description: Manage people, companies, and lists using the Quotient SDK order: 5 --- ## Overview The audience API lets you manage people, companies, and lists. Both the client and server SDKs expose the audience API under `audience.*`. The client SDK includes `audience.people` only. The server SDK adds `audience.companies` and `audience.lists`. | Endpoint | API Key | Server SDK | Client SDK | |---|---|---|---| | Upsert person | public or private | `audience.people.upsert()` | `audience.people.upsert()` | | Upsert company | public or private | `audience.companies.upsert()` | — | | Upsert list | private only | `audience.lists.upsert()` | — | | List all lists | private only | `audience.lists.list()` | — | | Get a list | private only | `audience.lists.get()` | — | | List people in a list | private only | `audience.lists.listPeople()` | — | | Add people to a list | private only | `audience.lists.addPeople()` | — | | Remove people from a list | private only | `audience.lists.removePeople()` | — | To manage list membership from the browser, use `audience.people.upsert()` with the `lists` parameter. ## People ### Upsert a Person #### `audience.people.upsert(params)` > `POST /api/v0/audience/people` > > **Auth:** public or private key · scope: `AUDIENCE_PERSON_WRITE` Creates or updates a person record based on email address. | Param | Type | Required | Description | |---|---|---|---| | `emailAddress` | `string` | Yes | Primary identifier | | `emailSubscriptionStatus` | `"SUBSCRIBED" \| "UNSUBSCRIBED"` | No | Marketing email opt-in state | | `firstName` | `string` | No | First name | | `lastName` | `string` | No | Last name | | `jobTitle` | `string` | No | Job title | | `leadScore` | `number` | No | Integer lead score (default 0) | | `lists` | `string[]` | No | List slugs to add the person to | | `properties` | `Record` | No | Custom properties (must be pre-defined) | ```typescript const { personId } = await client.audience.people.upsert({ emailAddress: "user@example.com", firstName: "Jane", lastName: "Doe", emailSubscriptionStatus: "SUBSCRIBED", leadScore: 50, lists: ["newsletter", "customers"], properties: { plan: "pro", signupSource: "landing-page", }, }); ``` **Email Subscription Statuses:** - `SUBSCRIBED` - Opted in to marketing emails - `UNSUBSCRIBED` - Opted out of marketing emails - If not specified: - Existing people keep their current state - New people default based on double opt-in settings **Returns:** ```typescript { personId: string; // Unique identifier (CUID format) } ``` ## Companies ### Upsert a Company #### `audience.companies.upsert(params)` > `POST /api/v0/audience/companies` > > **Auth:** public or private key · scope: `AUDIENCE_COMPANY_WRITE` Creates or updates a company record keyed on `domain`. | Param | Type | Required | Description | |---|---|---|---| | `domain` | `string` | Yes | Company domain (upsert key) | | `name` | `string` | No | Company name | | `description` | `string` | No | Description | | `industries` | `string[]` | No | Industry tags | | `totalEmployees` | `number` | No | Employee count | | `address1` | `string` | No | Street address | | `city` | `string` | No | City | | `regionCode` | `string` | No | State/region code | | `country` | `string` | No | Country code | | `zip` | `string` | No | Postal code | | `socialLinkLinkedIn` | `string` | No | LinkedIn URL | | `properties` | `Record` | No | Custom properties (must be pre-defined) | ```typescript const { companyId } = await client.audience.companies.upsert({ domain: "acme.com", name: "Acme Corp", description: "Makes everything", industries: ["manufacturing"], totalEmployees: 500, properties: { arr: 1200000, fundingStage: "Series B", }, }); ``` **Returns:** ```typescript { companyId: string; // Unique identifier (CUID format) } ``` ## Lists The Lists API lets you create and manage audience lists programmatically. Lists are identified by a unique slug and can contain people identified by either their person ID or email address. All list operations require a private API key. List membership changes (`addPeople`, `removePeople`) are not safe to expose on a public key, so they're server-side only. ```typescript import { QuotientServer } from "@quotientjs/server"; const client = new QuotientServer({ privateKey: "sk_your_private_api_key", }); ``` ### Create or Update a List #### `audience.lists.upsert(options)` > `POST /api/v0/audience/lists` > > **Auth:** private key only · scope: `AUDIENCE_LIST_WRITE` The **slug** is always the upsert key — you either provide it directly, or it gets derived from the name. | Param | Type | Required | Description | |---|---|---|---| | `name` | `string` | One of `name` or `slug` | List name (slug auto-derived if slug omitted) | | `slug` | `string` | One of `name` or `slug` | Explicit slug to target | | `description` | `string` | No | List description | ```typescript // By name — slug is auto-generated ("newsletter-subscribers") await client.audience.lists.upsert({ name: "Newsletter Subscribers", description: "People who opted into our weekly newsletter", }); // By slug — target an existing list directly await client.audience.lists.upsert({ slug: "newsletter-subscribers", description: "Updated description", }); // By slug + name — target by slug, rename the list await client.audience.lists.upsert({ slug: "newsletter-subscribers", name: "Weekly Newsletter", }); ``` **Upsert behavior:** | Input | Lookup key | Not found | Found | |---|---|---|---| | `{ name }` | `generateSlug(name)` | Create with name + generated slug | Update name | | `{ name, description }` | `generateSlug(name)` | Create with both | Update name + description | | `{ slug }` | slug | Create (name defaults to slug) | No-op | | `{ slug, name }` | slug | Create with name + slug | Update name | | `{ slug, description }` | slug | Create (name defaults to slug) | Update description | | `{ slug, name, description }` | slug | Create with all fields | Update name + description | **Returns:** ```typescript { listId: string; name: string; slug: string; } ``` ### List All Lists #### `audience.lists.list(options?)` > `GET /api/v0/audience/lists` > > **Auth:** private key only · scope: `AUDIENCE_LIST_READ` | Param | Type | Required | Description | |---|---|---|---| | `search` | `string` | No | Filter by name | | `page` | `number` | No | Page number (default 1) | | `limit` | `number` | No | Results per page (default 20) | ```typescript const { lists, pageData } = await client.audience.lists.list({ search: "newsletter", page: 1, limit: 20, }); ``` **Returns:** ```typescript { lists: { id: string; name: string; slug: string; description: string | null; peopleCount: number; createdAt: string; updatedAt: string; }[]; pageData: { page: number; limit: number; total: number; isNextPageAvailable: boolean; }; } ``` ### Get a Single List #### `audience.lists.get(options)` > `GET /api/v0/audience/lists/{slug}` > > **Auth:** private key only · scope: `AUDIENCE_LIST_READ` | Param | Type | Required | Description | |---|---|---|---| | `slug` | `string` | Yes | List slug | ```typescript const { list } = await client.audience.lists.get({ slug: "newsletter-subscribers", }); ``` **Returns:** ```typescript { list: { id: string; name: string; slug: string; description: string | null; peopleCount: number; createdAt: string; updatedAt: string; }; } ``` ### List People in a List #### `audience.lists.listPeople(options)` > `GET /api/v0/audience/lists/{slug}/people` > > **Auth:** private key only · scope: `AUDIENCE_LIST_READ` | Param | Type | Required | Description | |---|---|---|---| | `listSlug` | `string` | Yes | List slug | | `search` | `string` | No | Filter by email | | `page` | `number` | No | Page number (default 1) | | `limit` | `number` | No | Results per page (default 20) | ```typescript const { people, pageData } = await client.audience.lists.listPeople({ listSlug: "newsletter-subscribers", search: "jane", page: 1, limit: 20, }); ``` **Returns:** ```typescript { people: { personId: string; emailAddress: string; firstName: string | null; lastName: string | null; }[]; pageData: { page: number; limit: number; total: number; isNextPageAvailable: boolean; }; } ``` ### Add People to a List #### `audience.lists.addPeople(options)` > `POST /api/v0/audience/lists/{slug}/people` > > **Auth:** private key only · scope: `AUDIENCE_LIST_WRITE` Add up to 100 people per request. Each entry can reference an existing person by ID, or provide an email address to upsert a person and add them in one call. | Param | Type | Required | Description | |---|---|---|---| | `listSlug` | `string` | Yes | List slug | | `people` | `AddPersonEntry[]` | Yes | Array of people to add (max 100) | Each entry in `people` is one of: | Param | Type | Required | Description | |---|---|---|---| | `personId` | `string` | Yes (if no email) | Existing person ID | | `emailAddress` | `string` | Yes (if no ID) | Email to upsert | | `firstName` | `string` | No | First name (with email only) | | `lastName` | `string` | No | Last name (with email only) | | `jobTitle` | `string` | No | Job title (with email only) | | `leadScore` | `number` | No | Lead score (with email only) | | `properties` | `Record` | No | Custom properties (with email only) | ```typescript await client.audience.lists.addPeople({ listSlug: "newsletter-subscribers", people: [ { personId: "clx..." }, { emailAddress: "jane@example.com", firstName: "Jane", lastName: "Doe", properties: { plan: "pro" }, }, ], }); ``` **Returns:** ```typescript { added: number; listSlug: string; listId: string; } ``` ### Remove People from a List #### `audience.lists.removePeople(options)` > `DELETE /api/v0/audience/lists/{slug}/people` > > **Auth:** private key only · scope: `AUDIENCE_LIST_WRITE` Remove up to 100 people per request. Each entry can reference a person by ID or by email address. This operation is idempotent — removing a person who is not in the list (or referencing an email that doesn't exist) is a no-op. | Param | Type | Required | Description | |---|---|---|---| | `listSlug` | `string` | Yes | List slug | | `people` | `RemovePersonEntry[]` | Yes | Array of people to remove (max 100) | Each entry in `people` is one of: | Param | Type | Description | |---|---|---| | `personId` | `string` | Existing person ID | | `emailAddress` | `string` | Person's email address | ```typescript await client.audience.lists.removePeople({ listSlug: "newsletter-subscribers", people: [ { personId: "clx..." }, { emailAddress: "jane@example.com" }, ], }); ``` **Returns:** ```typescript { removed: number; listSlug: string; listId: string; } ``` ## Common Patterns ### User Identification on Signup ```javascript async function identifyUser(user) { const { personId } = await client.audience.people.upsert({ emailAddress: user.email, firstName: user.firstName, lastName: user.lastName, emailSubscriptionStatus: "SUBSCRIBED", leadScore: user.leadScore ?? 0, lists: ["customers", "newsletter"], properties: { plan: user.subscription, signupDate: new Date(), lastLogin: new Date(), totalPurchases: user.purchaseCount, }, }); console.log(`User identified: ${personId}`); } ``` ### Contact Form Capture ```javascript async function handleContactForm(formData) { try { await client.audience.people.upsert({ emailAddress: formData.email, firstName: formData.firstName, lastName: formData.lastName, lists: ["leads"], properties: { message: formData.message, source: "contact-form", submittedAt: new Date(), }, }); await client.analytics.event({ eventType: "formSubmit", formName: "contact", }); } catch (error) { console.error("Failed to save lead:", error); } } ``` ### Syncing a List from an External Source ```typescript const client = new QuotientServer({ privateKey: "sk_..." }); // Ensure the list exists await client.audience.lists.upsert({ name: "Active Customers", description: "Synced from billing system", }); // Add people in batches of 100 const customers = getActiveCustomers(); // your data source for (let i = 0; i < customers.length; i += 100) { const batch = customers.slice(i, i + 100); await client.audience.lists.addPeople({ listSlug: "active-customers", people: batch.map((c) => ({ emailAddress: c.email, firstName: c.firstName, lastName: c.lastName, properties: { plan: c.plan, mrr: c.mrr, }, })), }); } ``` ## Next Steps -- End of: /sdk/audience -- Start of: /sdk/blog --- title: Blog description: Retrieve and render blog content using the Quotient SDK order: 7 --- ## Overview The blog API lets you retrieve published blog posts, authors, and tags from your Quotient blog. All endpoints are read-only and work with both public and private API keys. | Endpoint | API Key | Server SDK | Client SDK | |---|---|---|---| | Get blog post | public or private | `blog.get()` | `blog.get()` | | List blog posts | public or private | `blog.list()` | `blog.list()` | | List authors | public or private | `blog.listAuthors()` | `blog.listAuthors()` | ## Get a Blog Post #### `blog.get(options)` > `GET /api/v0/blog/{slug}` > > **Auth:** public or private key · scope: `BLOG_READ` | Param | Type | Required | Description | |---|---|---|---| | `slug` | `string` | Yes | Blog post slug | | `rawHtml` | `boolean` | No | Return pre-rendered HTML | ```typescript const { blog } = await client.blog.get({ slug: "my-first-post", rawHtml: true, }); ``` **Returns:** ```typescript { blog: { id: string; title: string; slug: string; content: JSON; dominantImageUrl?: string | null; publishDate: Date | null; rawHtml?: string | null; authors: { id: string; name: string; emailAddress?: string | null; avatarUrl?: string | null; }[]; metaDescription: string | null; tags: { id: string; name: string; description?: string | null; }[]; }; } ``` ## List Blog Posts #### `blog.list(options?)` > `GET /api/v0/blog/list` > > **Auth:** public or private key · scope: `BLOG_READ` | Param | Type | Required | Description | |---|---|---|---| | `authorIds` | `string[]` | No | Filter by author IDs | | `tagIds` | `string[]` | No | Filter by tag IDs | | `statuses` | `("DRAFT" \| "SCHEDULED" \| "PUBLISHED")[]` | No | Filter by status | | `search` | `string` | No | Search by title | | `page` | `number` | No | Page number (default 1) | | `limit` | `number` | No | Results per page (default 50) | ```typescript const { blogs, pageData } = await client.blog.list({ statuses: ["PUBLISHED"], search: "marketing", page: 1, limit: 20, }); ``` **Returns:** ```typescript { blogs: { id: string; title: string; slug: string; content: JSON; dominantImageUrl?: string | null; publishDate: Date | null; authors: { id: string; name: string; emailAddress?: string | null; avatarUrl?: string | null; }[]; metaDescription: string | null; tags: { id: string; name: string; description?: string | null; }[]; }[]; pageData: { page: number; limit: number; total: number; isNextPageAvailable: boolean; }; } ``` ## List Authors #### `blog.listAuthors(options?)` > `GET /api/v0/blog/authors` > > **Auth:** public or private key · scope: `BLOG_READ` | Param | Type | Required | Description | |---|---|---|---| | `search` | `string` | No | Filter by name | | `page` | `number` | No | Page number (default 1) | | `limit` | `number` | No | Results per page (default 10) | ```typescript const { authors, pageData } = await client.blog.listAuthors({ search: "jane", page: 1, limit: 10, }); ``` **Returns:** ```typescript { authors: { id: string; name: string; emailAddress?: string | null; avatarUrl?: string | null; }[]; pageData: { page: number; limit: number; total: number; isNextPageAvailable: boolean; }; } ``` ## Caching in Next.js Blog content is a natural fit for caching. Posts change infrequently, so re-fetching them on every request is wasteful — especially on high-traffic pages like a blog index or a sitemap. Each server blog method accepts an optional second argument, `fetchOptions`, which is forwarded to `fetch`. In a Next.js app you can use it to opt into Incremental Static Regeneration instead of fetching fresh data every time. For example, a sitemap that lists every published post only needs to refresh every hour or so: ```typescript const { blogs } = await client.blog.list( { statuses: ["PUBLISHED"], limit: 1000 }, { cache: "force-cache", next: { revalidate: 3600 } }, ); ``` See [Customizing fetch behavior](/docs/sdk) for the full list of options you can pass and the fields the SDK reserves for itself. ## Rendering The `@quotientjs/react` package provides a `` component that renders blog content into HTML. It takes the `content` JSON from `blog.get()` and produces unstyled semantic HTML elements. ### Basic Usage ```tsx import { Blog } from "@quotientjs/react"; import { QuotientServer } from "@quotientjs/server"; // app/blog/[slug]/page.tsx export default async function BlogPost({ params, }: { params: { slug: string }; }) { const client = new QuotientServer({ privateKey: process.env.QUOTIENT_PRIVATE_KEY!, }); const { blog } = await client.blog.get({ slug: params.slug }); return ; } ``` ### Styling The `` component renders unstyled HTML with default class names on each element (`quotient-p`, `quotient-h1`, `quotient-a`, etc.). There are three ways to style blog content: **1. Target default classes in CSS** ```css .quotient-p { line-height: 1.75; } .quotient-h2 { margin-top: 2rem; } .quotient-a { color: blue; text-decoration: underline; } ``` **2. Override classes via `elementClassName`** ```tsx ``` **3. Tailwind Typography plugin** ```tsx ``` ### Available Class Targets | Element | Default Class | |---|---| | `` | `quotient-strong` | | `` | `quotient-em` | | `` | `quotient-u` | | `` | `quotient-a` | | `

` | `quotient-p` | | `

` – `

` | `quotient-h1` – `quotient-h6` | | `
    ` | `quotient-ul` | | `
      ` | `quotient-ol` | | `
    1. ` | `quotient-li` | | `` | `quotient-image` | | assets | `quotient-asset` | ### Client-Side Fetching Within client components inside a ``, use the `useBlogs` hook for client-side blog fetching: ```tsx // app/blog/blog-list.tsx "use client"; import { BlogStatus, useBlogs } from "@quotientjs/react"; export default function BlogList({ page, limit, statuses, }: { page: number; limit: number; statuses: BlogStatus[]; }) { const { data, isLoading } = useBlogs({ page, limit, statuses, }); const { blogs, pageData } = data; return ( {/* Render blog list according to your own specs */} ); } // app/blog/page.tsx "use client"; import { QuotientProvider, BlogStatus } from "@quotientjs/react"; const PAGE_SIZE = 50; export default function Blogs() { const [page, setPage] = useState(1); const [statuses, setStatuses] = useState([]); return ( ); } ``` You can also fetch blogs using the client directly via `useQuotient`: ```tsx // app/blog/blog-list.tsx import { QuotientProvider, BlogStatus, useQuotient } from "@quotientjs/react"; import { useEffect, useState } from "react"; export default function BlogList({ page, limit, statuses, }: { page: number; limit: number; statuses: BlogStatus[]; }) { const { client } = useQuotient(); const [blogs, setBlogs] = useState([]); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); const [hasNextPage, setHasNextPage] = useState(false); useEffect(() => { async function fetchBlogs() { try { setIsLoading(true); setError(null); const response = await client.blog.list({ page, limit, statuses, }); setBlogs(response.blogs); setHasNextPage(response.pageData.isNextPageAvailable); } catch (err) { setError(err instanceof Error ? err.message : "An error occurred"); } finally { setIsLoading(false); } } fetchBlogs(); }, [page, client]); return ( {/* Render blog list according to your own specs */} ); } // app/blog/page.tsx "use client"; import { QuotientProvider } from "@quotientjs/react"; const PAGE_SIZE = 50; export default function Blogs() { const [page, setPage] = useState(1); const [statuses, setStatuses] = useState([]); return ( ); } ``` ## Next Steps -- End of: /sdk/blog -- Start of: /sdk/flow --- title: Flows description: Trigger Quotient flows from your application with the JavaScript SDK. order: 6 --- ## Overview Quotient's built-in triggers cover most of the moments you would want to start a flow: event triggers, schedule triggers, person-created triggers, and so on. Sometimes, though, the trigger lives entirely inside your product. Your backend might be the only thing that knows when a user has finished your signup wizard, when a customer has cancelled through your billing page, or when someone has crossed a usage threshold that only your database tracks. A programmatic flow bridges that gap. You build the flow in Quotient as usual, set its trigger type to **Programmatic**, and then call `flow.trigger()` from your application whenever the event you care about happens. | Endpoint | API Key | Server SDK | Client SDK | |---|---|---|---| | Trigger flow | public or private | `flow.trigger()` | `flow.trigger()` | Common use cases include: - **Welcome series on signup.** Start a sequence of onboarding emails immediately after a user finishes signing up. - **Win-back on cancellation.** Queue up a win-back sequence when a customer cancels their subscription. - **Pricing events.** Fire a flow when something pricing-significant happens to a customer — e.g., their free trial lapses, their card declines, or they upgrade to a paid plan. We use this one ourselves for our own reverse-free-trial flow. - **Usage milestone.** Send a congratulatory email when a customer crosses a meaningful threshold in your product, like their 100th order or 10,000th email. - **Internal notification.** Notify your sales or support team when a specific in-product event fires. ## Set up a Programmatic Flow Build your flow as you normally would. The emails, branches, and timing are no different from any other flow. The only thing you need to change is the trigger. Open the flow's trigger settings and set the type to **Programmatic**. ![Programmatic Flow](/screenshots/programmatic-flow.png) You can also restrict the trigger to a specific segment, just like with scheduled triggers. If your code calls `flow.trigger()` for someone who does not match the segment, Quotient will not enroll them. For example, a "welcome to the Pro plan" flow with a paid-customer segment restriction will not fire for a free-tier user, even if your code calls it with one. ## Trigger a Flow #### `flow.trigger(options)` > `POST /api/v0/flow/{flowId}/trigger` > > **Auth:** public or private key · scope: `FLOW_TRIGGER` | Param | Type | Required | Description | |---|---|---|---| | `flowId` | `string` | Yes | The flow ID to trigger | | `personId` | `string` | Yes | The person to enroll in the flow | ```typescript const result = await client.flow.trigger({ flowId: "YOUR-FLOW-ID", personId: "PERSON-ID", }); ``` **Returns:** ```typescript { success: boolean; } ``` Quotient enrolls the given person in the flow and starts the first step. The call returns as soon as enrollment is confirmed. It does not wait for the flow to finish running, which could take hours or days depending on how it is configured. ### Server Side Example ```typescript import { QuotientServer } from "@quotientjs/server"; const quotient = new QuotientServer({ privateKey: process.env.QUOTIENT_PRIVATE_KEY!, }); await quotient.flow.trigger({ flowId: "YOUR-FLOW-ID", personId: "PERSON-ID", }); ``` ### Client Side Example ```typescript import { QuotientClient } from "@quotientjs/client"; const quotient = await QuotientClient.init({ apiKey: process.env.NEXT_PUBLIC_QUOTIENT_PUBLIC_KEY!, }); await quotient.flow.trigger({ flowId: "YOUR-FLOW-ID", personId: "PERSON-ID", }); ``` Anything running in the browser is visible to users and can be called by anyone who inspects your code. Do not use client-side triggering for flows that should not be fired arbitrarily, like a flow that notifies your sales team. Trigger those from your backend instead. ## Worked Example: Signup Welcome Flow To make this concrete, here is how you might wire up a welcome flow that fires when a new user finishes signup. The pattern is: upsert the person in Quotient so you have a stable `personId`, then trigger the flow. ```typescript import { QuotientServer } from "@quotientjs/server"; const quotient = new QuotientServer({ privateKey: process.env.QUOTIENT_PRIVATE_KEY!, }); export async function onUserSignedUp(user: { email: string; firstName: string; lastName: string; }) { const { personId } = await quotient.audience.people.upsert({ emailAddress: user.email, firstName: user.firstName, lastName: user.lastName, emailSubscriptionStatus: "SUBSCRIBED", }); await quotient.flow.trigger({ flowId: process.env.SIGNUP_FLOW_ID!, personId, }); } ``` The flow itself lives entirely in Quotient. Your code only decides when to fire it. The content is edited in Quotient and can change without a deploy. If the trigger call fails due to a transient network error, the person will not be enrolled. If you are triggering from a web request handler, consider offloading the call to a background job system like Inngest, Temporal, or a queue so it can be retried independently of the HTTP response. ### Why not just use the Person Created trigger? If you wanted a flow to fire whenever someone enters your audience, you could skip the SDK entirely and configure the flow with a **Person Created** trigger in the Quotient UI. That works great for "anyone who lands in the list, anywhere, for any reason." The reason to reach for `flow.trigger()` instead is when the flow shouldn't fire every time. In the welcome example above, the same `audience.people.upsert()` call gets made in lots of places — a contact form, a newsletter signup, a lead-magnet download — and you probably don't want a brand-new user to receive the welcome series simply because someone typed their email into a landing page form. Routing flow enrollment through your own backend lets you decide _which_ upsert paths count as a signup and which don't. ## Finding the IDs `flow.trigger()` needs two IDs: the flow you are triggering and the person you are enrolling. **Flow ID.** Open the flow in Quotient. The ID is in the URL. Treat it like any other configuration value. Hardcoding is fine for a single well-known flow, but most teams store it in an environment variable so staging and production can point to different flows. **Person ID.** This is the ID that Quotient assigns when a person enters your marketing system. You will typically get it from `audience.people.upsert()`, which accepts an email address and returns a `personId`. Once you have it, you can store it on your user record and reuse it across subsequent trigger calls. ## Scopes | Scope | Required for | |---|---| | `FLOW_TRIGGER` | `flow.trigger()` | ## Next Steps -- End of: /sdk/flow -- Start of: /sdk/index --- title: JavaScript SDK description: Complete guide to using Quotient's JavaScript SDK order: 1000 --- Quotient makes it easy to integrate our platform into your website or node.js application. ## Packages Quotient ships three packages depending on where you're integrating: | Package | Environment | API Key | Exposes | |---|---|---|---| | `@quotientjs/client` | Browser | Public (`pk_`) | `analytics`, `audience.people`, `blog`, `flow`, `store`, `auth` | | `@quotientjs/react` | Browser (React) | Public (`pk_`) | Same as client, plus `QuotientProvider`, `useQuotient`, `useBlogs` | | `@quotientjs/server` | Node.js | Private (`sk_`) | `analytics`, `audience` (people, companies, lists), `blog`, `flow`, `memory`, `auth` | **Client SDK** (`@quotientjs/client`, `@quotientjs/react`) runs in the browser with a public API key. It tracks analytics, identifies users via `audience.people.upsert()`, renders blogs, and triggers flows. Public keys are origin-restricted so they're safe to ship in frontend code. **Server SDK** (`@quotientjs/server`) runs in Node.js with a private API key. It has full access to the Quotient API — the complete audience API (people, companies, and lists), memory, and everything the client SDK can do. Use it for backend integrations, cron jobs, and data syncs. ## Installation ### npm / pnpm / yarn ```bash # Client SDK (browsers) npm install @quotientjs/client # React bindings npm install @quotientjs/react # Server SDK (Node.js) npm install @quotientjs/server ``` ### CDN Drop a single script tag into any HTML page — no build step required: ```html ``` ## Quick Start ### Vanilla JavaScript ```javascript import { QuotientClient } from "@quotientjs/client"; const quotient = await QuotientClient.init({ apiKey: "pk_your_public_api_key", }); // Track a page view await quotient.analytics.event({ eventType: "pageView" }); // Identify a user from a form submission await quotient.audience.people.upsert({ emailAddress: "user@example.com", firstName: "Jane", lastName: "Doe", }); ``` ### React ```jsx import { QuotientProvider, useQuotient } from "@quotientjs/react"; function App() { return ( ); } function ContactForm() { const { client } = useQuotient(); const handleSubmit = () => { client?.audience.people.upsert({ emailAddress: "user@example.com", firstName: "Jane", lastName: "Doe", }); }; return ; } ``` ### Server (Node.js) ```typescript import { QuotientServer } from "@quotientjs/server"; const quotient = new QuotientServer({ privateKey: "sk_your_private_api_key", }); // Manage lists, people, memory, and more const { lists } = await quotient.audience.lists.list(); ``` ## Customizing fetch behavior Every server SDK method accepts an optional second argument, `fetchOptions: RequestInit`. Whatever you pass here is forwarded to the underlying `fetch` call, so you can tune how an individual request behaves — its caching, request cancellation, custom headers, and anything else `fetch` understands. The most common reason to reach for this is caching in a Next.js app. By default the SDK requests `cache: "no-store"`, which is the safe choice for personalized or frequently changing data. But if a route can tolerate slightly stale data — a sitemap, say, that only changes a few times a week — you can opt into Incremental Static Regeneration (ISR) instead of re-fetching on every request: ```typescript // Sitemap route — revalidate hourly instead of re-fetching on every request const { blogs } = await quotient.blog.list( { statuses: ["PUBLISHED"], limit: 1000 }, { cache: "force-cache", next: { revalidate: 3600 } }, ); ``` Caching is just one example. Because `fetchOptions` is a standard `RequestInit` object, you can also pass an `AbortSignal` to cancel a request, set `next: { tags }` for tag-based revalidation, or attach your own request headers. The SDK does keep control of the fields it needs to function, though. The HTTP method, the request body, and the SDK's own headers — `Authorization`, `Content-Type`, and the platform header — always take precedence over anything you pass. That means you can't accidentally break authentication or change a request's verb by supplying your own `headers` or `method`. ## Next Steps -- End of: /sdk/index -- Start of: /sdk/memory --- title: Memory description: How to use the Quotient SDK to read and write Memory programmatically order: 8 --- ## Overview Quotient exposes its memories via API, making it easy to integrate with other systems and agents. For example, you can fetch Quotient's marketing-related memories inside of a coding agent to help it write better copy for your website. Or you can go in the opposite direction — you can have your AI personal assistant create memories directly in Quotient, or you can set up an integration to write to Quotient's memory from your company knowledge store. The Memory API models your content as a path-aware filesystem. Content is stored internally as Quotient Rich Text but the SDK uses **markdown** as the wire format for simplicity. All paths start with `/`. The SDK provides separate `ls` and `cat` methods with unambiguous return types — no need to check what you got back. | Endpoint | API Key | Server SDK | Client SDK | |---|---|---|---| | List folder | private only | `memory.ls()` | — | | Read document | private only | `memory.cat()` | — | | Write document | private only | `memory.write()` | — | | Create folder | private only | `memory.mkdir()` | — | | Delete | private only | `memory.rm()` | — | | Search | private only | `memory.search()` | — | ```typescript import { QuotientServer } from "@quotientjs/server"; const quotient = new QuotientServer({ privateKey: process.env.QUOTIENT_PRIVATE_KEY!, }); ``` ## List Folder Contents #### `memory.ls(options)` > `GET /api/v0/memory/{path}` > > **Auth:** private key only · scope: `MEMORY_READ` | Param | Type | Required | Description | |---|---|---|---| | `path` | `Path` | Yes | Folder path (must start with `/`) | | `deep` | `boolean` | No | If true, returns recursive tree with nested children | ```typescript // List direct children of root const root = await quotient.memory.ls({ path: "/" }); // root.items → [{ type: "folder", name: "projects", path: "/projects/", ... }, ...] // List direct children of a specific folder const projects = await quotient.memory.ls({ path: "/projects" }); // Get full recursive tree const tree = await quotient.memory.ls({ path: "/", deep: true }); ``` **Returns:** `{ items: MemoryFolderItem[] }` Returns 400 if path is a document. Returns 404 if path doesn't exist. ## Read a Document #### `memory.cat(options)` > `GET /api/v0/memory/{path}` > > **Auth:** private key only · scope: `MEMORY_READ` | Param | Type | Required | Description | |---|---|---|---| | `path` | `Path` | Yes | Document path (must start with `/`) | ```typescript const doc = await quotient.memory.cat({ path: "/projects/budget" }); // doc.name → "budget" // doc.content → "# Q1 Budget\n\nTotal: $50,000\n..." // doc.tags → ["brand"] // doc.pinned → false // doc.updatedAt → "2024-01-15T10:30:00.000Z" ``` **Returns:** | Field | Type | Description | |-------|------|-------------| | `name` | `string` | Document name (last path segment) | | `path` | `string` | Full document path | | `content` | `string` | Markdown content | | `tags` | `string[]` | Assigned tags | | `pinned` | `boolean` | Whether the document is pinned | | `updatedAt` | `string` | ISO timestamp | | `createdAt` | `string` | ISO timestamp | Returns 400 if path is a folder. Returns 404 if path doesn't exist. ## Write a Document #### `memory.write(options)` > `POST /api/v0/memory/{path}` > > **Auth:** private key only · scope: `MEMORY_WRITE` Creates or updates a document. Parent folders are auto-created. | Param | Type | Required | Description | |---|---|---|---| | `path` | `Path` | Yes | Document path | | `title` | `string` | No | Document title (derived from path if omitted) | | `content` | `string` | No | Markdown content. Omit for metadata-only updates | | `tags` | `string[]` | No | Replaces all tags. Pass `[]` to clear | | `pinned` | `boolean` | No | Pin or unpin the document | ```typescript // Upsert — creates if missing, updates if exists await quotient.memory.write({ path: "/projects/budget", content: "# Q1 Budget\n\nTotal: $50,000", }); // Write with tags and pinning await quotient.memory.write({ path: "/brand/voice", content: "# Brand Voice\n\nWarm, confident, and direct.", tags: ["brand", "tone"], pinned: true, }); // Metadata-only update (document must exist) await quotient.memory.write({ path: "/projects/budget", tags: ["brand"], }); ``` **Returns:** | Field | Type | Description | |-------|------|-------------| | `name` | `string` | Document name | | `path` | `string` | Full document path | | `tags` | `string[]?` | New tags (included when tags were set) | | `pinned` | `boolean?` | New pinned state (included when pinned was set) | When `content` is omitted, the document must already exist — returns 404 if the path is not a document. ## Create a Folder #### `memory.mkdir(options)` > `POST /api/v0/memory/{path}` > > **Auth:** private key only · scope: `MEMORY_WRITE` | Param | Type | Required | Description | |---|---|---|---| | `path` | `Path` | Yes | Folder path | | `name` | `string` | No | Folder name (derived from path if omitted) | ```typescript const folder = await quotient.memory.mkdir({ path: "/projects", name: "Projects", }); ``` `mkdir` is idempotent — calling it on an existing folder returns the existing folder instead of an error. ## Delete Memory #### `memory.rm(options)` > `DELETE /api/v0/memory/{path}` > > **Auth:** private key only · scope: `MEMORY_WRITE` | Param | Type | Required | Description | |---|---|---|---| | `path` | `Path` | Yes | Path to archive (auto-detects document vs folder) | ```typescript // Archive a document await quotient.memory.rm({ path: "/projects/budget" }); // Archive a folder and all its contents await quotient.memory.rm({ path: "/projects" }); ``` **Returns:** `{ success: boolean }` When called on a document, archives the document. When called on a folder, archives the folder and all its descendants (cascading delete). ## Search #### `memory.search(options)` > `POST /api/v0/memory/search` > > **Auth:** private key only · scope: `MEMORY_READ` Runs a vector similarity search over all memory chunk embeddings. | Param | Type | Required | Description | |---|---|---|---| | `query` | `string` | Yes | Natural-language search query | | `tags` | `string[]` | No | Filter to documents with at least one of these tags | ```typescript const results = await quotient.memory.search({ query: "What is our brand tone?", }); for (const chunk of results.results) { console.log(chunk.memoryPath); // e.g. "/brand/voice" console.log(chunk.content); // the matching chunk text console.log(chunk.similarity); // cosine similarity score (0–1) } // Tag-filtered search const brandResults = await quotient.memory.search({ query: "brand guidelines", tags: ["brand", "tone"], }); ``` **Returns:** `{ results: SearchMemoryResult[] }` | Field | Type | Description | |-------|------|-------------| | `id` | `string` | Chunk ID | | `memoryId` | `string` | Parent document ID | | `memoryPath` | `string` | Parent document path | | `content` | `string` | Chunk text | | `headingPath` | `string[]` | Heading breadcrumb for the chunk's location | | `position` | `number` | Chunk index within the document | | `similarity` | `number` | Cosine similarity score (0–1, higher is more similar) | Results are ordered by descending similarity. The default limit is 10 results. ## Tags Tags are flat string labels you attach to memory documents. They serve two purposes: **skill scoping** (agents load only memories matching their tags) and **filtering** (search, UI). ### Platform tags A fixed set of well-known labels: | Tag | Category | Description | |-----|----------|-------------| | `email` | Channel | Email campaign content | | `blog` | Channel | Blog and long-form writing | | `social` | Channel | Social media content | | `tone` | Domain | Voice and tone guidelines | | `audience` | Domain | Audience personas and segments | | `brand` | Domain | Brand identity and values | | `competitors` | Domain | Competitive intelligence | | `products` | Domain | Product information | ### Referential tags Link a memory to a specific entity using the `:` format: | Format | Example | Description | |--------|---------|-------------| | `user:` | `user:clx1a2b3c4d5e6f7g8h9` | Tie memory to a specific user | ```typescript await quotient.memory.write({ path: "/users/alice/preferences", content: "Prefers formal tone. Focuses on ROI.", tags: ["user:clx1a2b3c4d5e6f7g8h9", "audience"], }); ``` Tags are always replaced wholesale — there is no "add one tag" operation. To add a tag to an existing set, read the current tags, append, and write back. ```typescript const doc = await quotient.memory.cat({ path: "/brand/voice" }); await quotient.memory.write({ path: "/brand/voice", tags: [...doc.tags, "tone"], }); ``` ## Pinning Pinned documents are **always loaded into agent context**, regardless of what the agent is doing. Use pinning for critical, always-relevant content — brand voice guidelines, compliance rules, or high-priority personas. ```typescript await quotient.memory.write({ path: "/brand/voice", pinned: true }); await quotient.memory.write({ path: "/brand/voice", pinned: false }); ``` Use pinning sparingly — every pinned document consumes context tokens on every agent invocation. Tag-based loading is more efficient for content that is only relevant in certain contexts. ## Indexing and Chunking When you write a document, Quotient automatically: 1. **Chunks** the content by heading structure and paragraph boundaries 2. **Embeds** each chunk using a Voyage embedding model 3. **Stores** the embeddings for fast vector similarity queries This happens asynchronously after the write completes — the document is immediately readable via `cat`, but chunks may not be searchable for a few seconds after a write. Re-indexing also triggers automatically whenever content changes. ## Next Steps -- End of: /sdk/memory -- Start of: /sdk/react --- title: React SDK description: React hooks and components for integrating Quotient into React applications order: 9 --- ## Installation ```bash npm install @quotientjs/react ``` ## QuotientProvider Context provider that initializes and manages the SDK. Wrap your app with this component to use Quotient hooks in child components. | Prop | Type | Required | Description | |---|---|---|---| | `clientOptions.apiKey` | `string` | Yes | Your public API key | | `clientOptions.baseUrl` | `string` | No | Custom API endpoint | | `autoTrackPageViews` | `boolean` | No | Auto-track page views on mount (default false) | ```tsx import { QuotientProvider } from "@quotientjs/react"; function App() { return ( {children} ); } ``` ## useQuotient Access the Quotient client and context within React components. ```typescript import { useQuotient } from "@quotientjs/react"; function MyComponent() { const { client, // QuotientClient instance or null error, // Error or null if initialization failed reset, // () => void: Clear storage and reinitialize } = useQuotient(); } ``` | Field | Type | Description | |---|---|---| | `client` | `QuotientClient \| null` | The initialized client instance | | `error` | `Error \| null` | Set if initialization failed | | `reset` | `() => void` | Clear all stored data and reinitialize | ## useBlogs Fetch a paginated list of blogs within a client component. Must be inside a ``. | Param | Type | Required | Description | |---|---|---|---| | `page` | `number` | No | Page number | | `limit` | `number` | No | Results per page | | `statuses` | `BlogStatus[]` | No | Filter by status | ```tsx "use client"; import { BlogStatus, useBlogs } from "@quotientjs/react"; export default function BlogList({ page, limit, statuses, }: { page: number; limit: number; statuses: BlogStatus[]; }) { const { data, isLoading } = useBlogs({ page, limit, statuses, }); const { blogs, pageData } = data; return ( {/* Render blog list */} ); } ``` ## Common Patterns ### User Identification on Login ```tsx "use client"; import { useQuotient } from "@quotientjs/react"; function LoginHandler() { const { client } = useQuotient(); const handleLogin = async (user) => { await client?.audience.people.upsert({ emailAddress: user.email, firstName: user.firstName, lastName: user.lastName, lists: ["customers"], }); }; return ; } ``` ### Marketing Preference Center ```tsx "use client"; import { useQuotient } from "@quotientjs/react"; import { useState } from "react"; function EmailPreferences({ userEmail }) { const [state, setState] = useState("SUBSCRIBED"); const [lists, setLists] = useState(["newsletter", "promotions"]); const { client } = useQuotient(); const updatePreferences = async () => { try { await client.audience.people.upsert({ emailAddress: userEmail, emailSubscriptionStatus: state, lists: state === "SUBSCRIBED" ? lists : [], }); toast.success("Preferences updated"); } catch (error) { toast.error("Failed to update preferences"); } }; return (
      {state === "SUBSCRIBED" && (

      Email Lists:

      {/* More list options... */}
      )}
      ); } ``` ## Next Steps -- End of: /sdk/react -- Start of: /social/index --- title: Social Media Posts description: Create and publish social media content with Quotient order: 7 --- Documentation Graphic Social media is a powerful channel for building your brand, engaging with your audience, and driving traffic to your website. Quotient helps you create compelling social media content tailored to each platform. ## Supported Platforms Quotient currently supports creating and publishing posts to: - **X (Twitter)** - Including support for threads - **LinkedIn** - Professional networking and B2B content - **Instagram** - Visual content and engagement - **Facebook** - Pages and community engagement - **TikTok** - Short-form video and photo carousels ## Creating Social Posts Ask Quotient to help you [create social media posts](/s/most-recent-business/social) tailored to each platform. It understands the unique characteristics and best practices for each platform, including character limits, image requirements, and optimal posting strategies. When you create a social post, you can: - Write or edit the post content directly - Add images and media - Create multi-post threads (for X) - Add a first comment (LinkedIn, Instagram, Facebook) - Schedule posts for a specific date and time - Track the status of your posts ## Publishing Your Posts Once you've connected your social accounts in **Settings > Social Accounts**, Quotient can publish directly to each platform. Posts can be: - **Published immediately** — click "Publish" to post right away - **Scheduled** — set a date and time for automatic publishing - **Unpublished** — remove a published post from the platform (X, LinkedIn, Facebook) ## Creating Posts with Quotient Ask Quotient to help you create engaging social media content. It has access to your Knowledge Store, so everything it creates will be consistent with your brand's voice and messaging. Here are some tips for getting the most out of Quotient when creating social posts: - Provide context about your target audience and goals for each post - Ask Quotient to create variations for different platforms - Upload reference images or examples of posts you like - Request specific hashtags or mentions to include - Have Quotient create thread series for more in-depth topics -- End of: /social/index -- Start of: /trust-security/index --- title: Trust and Security description: How Quotient handles customer data. order: 1100 --- Quotient is built with security at its core. We implement industry-standard security practices across our infrastructure, application layer, and operational processes to protect your data at every level. This page provides an overview of our security practices and compliance measures. For more detailed information, please refer to our [Customer Data Privacy](/docs/trust-security/privacy) and [Data Processors](/docs/trust-security/subprocessors) documentation. ## Data Security ### Encryption All customer data is protected with enterprise-grade encryption at every layer: - **Encryption at rest:** Customer data stored in our databases is encrypted using AES-256 encryption, the industry standard for data at rest. Our database provider, [Neon](https://neon.tech), manages encryption keys and follows strict key management protocols. - **Encryption in transit:** All data transmitted between clients and our services is encrypted using TLS 1.3 or higher. This includes all API requests, web application traffic, and internal service communication. ### Backups and Data Durability Our database infrastructure is designed for high availability and durability. Continuous automated backups ensure that customer data can be recovered in the event of data loss or corruption. Our database provider supports point-in-time recovery, allowing us to restore data to any specific moment in time. Database backups are stored across multiple availability zones to protect against regional failures, and all backup data is encrypted with the same standards as production data. ## Infrastructure Security ### Cloud Infrastructure Quotient leverages best-in-class cloud infrastructure providers. [Vercel](https://vercel.com) provides secure, scalable hosting for our main application with built-in DDoS protection and edge network security. [Neon](https://neon.tech) provides enterprise-grade PostgreSQL hosting with automatic failover and high availability. Amazon Web Services (AWS) powers our storage, content delivery, and container orchestration needs. ### Physical Security We defer physical security controls to our infrastructure providers, who maintain SOC 2 Type II certified data centers. These facilities feature 24/7 security monitoring and surveillance, biometric access controls, environmental safeguards including fire suppression and climate control, redundant power systems, and undergo regular security audits and compliance certifications. ### Disaster Recovery Our disaster recovery strategy ensures business continuity through multiple layers of protection. Database infrastructure automatically fails over to standby instances in the event of hardware failure. Services are distributed across multiple availability zones to minimize the impact of regional outages. We maintain documented incident response procedures and conduct regular reviews to ensure rapid recovery from potential incidents. For more information on our incident response process, see the Incident Response section below. ## Application Security ### Secure Development Lifecycle Security is integrated into every phase of our development process. All code changes must be reviewed and approved by another engineer before deployment, ensuring that multiple eyes examine every change to our production systems. We maintain comprehensive test suites using [Vitest](https://vitest.dev) to catch bugs and security issues early in the development cycle. GitHub Actions automatically runs security checks, tests, and code quality analysis on every commit, providing immediate feedback to our engineering team. ### Vulnerability Management We actively monitor and address security vulnerabilities through multiple channels. [Dependabot](https://github.com/dependabot) automatically monitors our dependencies for known vulnerabilities and creates pull requests to update affected packages. We subscribe to security advisories from GitHub and our infrastructure providers to stay informed of emerging threats. Our systems automatically alert our engineering team when security issues are detected, and critical security patches are prioritized and deployed promptly following our change management procedures. ### Responsible Disclosure We take security vulnerabilities seriously. If you discover a security issue, please report it to us at security@getquotient.ai. We commit to acknowledging your report within 48 hours, investigating all legitimate security concerns, keeping you informed of our progress, and recognizing responsible disclosure in our security acknowledgments. ## Access Controls ### Internal Access Management Access to customer data is strictly controlled and monitored. Only engineering team members who require access for application support and debugging can access customer data, following the principle of least privilege. Access to critical systems including our codebase on GitHub, secrets management through [Infisical](https://infisical.com), and corporate applications is protected by multi-factor authentication. All team access is centrally managed through Google Workspace and can be immediately revoked when necessary. Access to customer data is logged and monitored for security and compliance purposes. ### Authentication and Authorization Internal systems use role-based access control (RBAC) to ensure team members only have access to the resources they need for their specific roles. We use Google Workspace as our primary identity provider, enabling consistent access policies across our tools and services. We conduct periodic reviews of access permissions to ensure they remain appropriate as team members' responsibilities evolve. ## Monitoring and Incident Response ### Security Monitoring Our systems are continuously monitored for security events and anomalies. [Sentry](https://sentry.io) provides real-time error tracking and performance monitoring across our application, alerting us immediately to any unexpected behavior. Self-hosted [Grafana](https://grafana.com) provides centralized logging, metrics, and alerting capabilities. Our engineering team receives immediate notifications of security-related events and anomalies, enabling rapid response to potential threats. ### Incident Response We maintain a structured incident response process to quickly identify, contain, and resolve security incidents. Automated monitoring systems alert our team to potential security incidents as they occur. We follow documented procedures for investigating, containing, and resolving security incidents to ensure consistent and effective responses. After any incident, we conduct thorough post-mortems to identify root causes and implement preventive measures. We commit to promptly notifying affected customers in the event of a data breach or security incident. For detailed information on our incident response procedures, please refer to our [Customer Data Privacy](/docs/trust-security/privacy) documentation. ## Data Processing For information about our data processing practices and the third-party service providers we use, please see our [Customer Data Privacy](/docs/trust-security/privacy) documentation for comprehensive privacy and data handling practices, and our [Data Processors](/docs/trust-security/subprocessors) page for a complete list of third-party service providers. ## Contact Us For security-related inquiries or to report a vulnerability, please contact us at security@getquotient.ai. For general questions about our security practices, reach out to support@getquotient.ai. ## Related Documentation -- End of: /trust-security/index -- Start of: /trust-security/privacy --- title: Customer Data Privacy description: How Quotient handles customer data. --- This document outlines Quotient's comprehensive data handling practices, including data collection, security measures, and compliance procedures. While these policies govern all customer data we process, special attention is given to data sourced through our Shopify integration, as this represents a primary data source for many of our merchants. In this document: - "Customer" refers to end users, i.e. individuals who receive marketing communications and whose data is processed by Quotient - "Merchant" refers to businesses using Quotient to manage and send marketing communications to their customers ## Data Processing Overview ### Scope of Processing Quotient processes Shopify Customer Data strictly as a data processor on behalf of our Merchants (the data controllers). All data processing activities are conducted in accordance with applicable data protection laws, including but not limited to GDPR, CCPA, and other relevant privacy regulations. Quotient processes only the minimum data necessary for app functionality, strictly for the purpose of providing our services, and never shares or sells Shopify Customer Data to third parties. ### Legitimate Processing Purpose Quotient processes Shopify Customer Data on behalf of Quotient customers for the following purposes: - Subscription list management and maintenance - Campaign segmentation and distribution - Campaign performance analytics and reporting - Automated, personalized marketing communications - Shopify Customer subscription preference management ### Required Data Elements To provide our core services, Quotient processes the [Shopify Customer data model](https://shopify.dev/docs/api/admin-graphql/2024-10/objects/customer), including elements such as but not limited to: - **Customer ID:** Unique identifier used to sync customer data between Quotient and Shopify, particularly for preference updates - **Email Address:** Primary contact method used for sending marketing communications - **First Name and Last Name:** Used for email personalization to address customers by name - **Phone Number:** Used for SMS marketing communications when enabled - **Location Data:** Including address, city, state and country information for geographic segmentation and localized marketing - **Order History:** Used to enable personalized product recommendations and segmentation based on purchase behavior ## Data Protection Measures ### Technical Security All data transmission occurs over TLS 1.3 encrypted connections to ensure secure data transfer between systems. Our databases employ industry-standard AES-256 encryption for all data at rest, including both live and backup data. We maintain a robust key management system that regularly rotates encryption keys and securely stores them in an isolated environment. Our infrastructure includes automated disaster recovery with regular backups stored in geographically distributed locations. While we maintain robust security measures, Merchants remain responsible for their use of our services and compliance with their local privacy laws. We recommend Merchants review their own privacy policies and ensure they have appropriate consent for data processing. ### Organizational Security Access to customer data is strictly controlled through role-based access control (RBAC) and is limited to essential engineering personnel who require access for platform maintenance and support. We enforce comprehensive security policies including: - Mandatory strong password requirements with regular rotation - Multi-factor authentication for all system access - Detailed access logging and regular security audits - Automated monitoring and alerting for suspicious activities ## Data Subject Rights ### Customer Rights Management Quotient provides comprehensive mechanisms to honor data subject rights, including the right to access personal data and the right to erasure ("right to be forgotten"). For Shopify-integrated merchants, we automatically process data subject requests through Shopify's standardized compliance webhooks. These webhooks ensure that when customers request their data or request deletion through Shopify: - Data access requests are fulfilled within the required timeframe - Data deletion requests are processed systematically - Shop data is properly handled upon app uninstallation For customers not integrated through Shopify, data subject requests can be submitted directly to support@getquotient.ai. All requests will be processed in accordance with applicable privacy regulations. ### Data Deletion Procedures All customer data deletion is handled through automated processes. For Shopify-integrated accounts, deletion requests are processed immediately through Shopify's compliance webhooks. When a Quotient account is deleted, whether through Shopify uninstallation or direct account closure, all associated customer data is permanently removed from our systems through cascade deletion. We retain customer data only for as long as necessary to provide our services. This means data is kept for the duration of an active Quotient account, as this data is essential for core marketing functionality. ## Incident Response ### Security Incident Management In the event of a security incident, we follow a structured response protocol: 1. Immediate Actions - Block suspicious activity - Log the incident - Notify affected customers - Preserve evidence 2. Recovery Steps - Assess data exposure - Implement fixes - Document incident - Update procedures Our incident response team actively monitors system activity and will respond promptly to any detected security anomalies. We strive to maintain clear communication with affected parties throughout any incident resolution process. -- End of: /trust-security/privacy -- Start of: /trust-security/subprocessors --- title: Data Processors description: Third-party service providers that process customer data on behalf of Quotient. --- Quotient uses the following third-party service providers (subprocessors) to help deliver our services. These subprocessors may process customer data on behalf of Quotient in accordance with our data processing agreements and applicable data protection laws. ## Active Subprocessors
      Logo Subprocessor Purpose
      Anthropic LLM provider. Powers AI features including content generation and marketing automation.
      OpenAI LLM provider. Used for certain AI workflows including content generation and analysis.
      Google Cloud Cloud services provider. Used for AI models and authentication services.
      Amazon Web Services Cloud infrastructure provider. Used for storage, content delivery, and container orchestration services.
      Vercel Application hosting. Hosts the main Quotient application and website infrastructure.
      Neon Database hosting. Stores and manages customer data, campaigns, and application state.
      Resend Email delivery service. Sends marketing emails on behalf of merchants and transactional emails from Quotient.
      Infisical Secrets management. Manages environment variables and API keys (does not process customer data).
      Modal Serverless computing platform. Executes Python-based AI and data processing workflows.
      Inngest Background job processing. Handles data synchronization, ETL operations, and scheduled tasks.
      Pusher Real-time messaging service. Broadcasts updates and enables real-time features in the application.
      GitHub Code hosting and CI/CD. Manages source code and deployment pipelines (does not process customer data).
      Sentry Error tracking and performance monitoring. May capture limited data in error logs for debugging purposes.
      Liveblocks Real-time collaboration infrastructure. Enables collaborative editing features in WYSIWYG editors.
      ## Data Processing Compliance All subprocessors are carefully vetted for security and compliance. Where required by applicable data protection laws, we maintain data processing agreements with our subprocessors that include: - Appropriate technical and organizational security measures - Confidentiality commitments - Data protection compliance obligations - Terms governing data transfers and subprocessing ## Updates to This List This subprocessor list is current as of the date of this document. Quotient reserves the right to add, remove, or replace subprocessors as needed to improve our services. Material changes to this list will be communicated to merchants in accordance with our Terms of Service. If you have questions about our subprocessors or data processing practices, please contact us at support@getquotient.ai. -- End of: /trust-security/subprocessors -- Start of: /wordpress/index --- title: WordPress Integration description: Connect your WordPress site to Quotient to automatically sync your blog posts and streamline your content marketing workflow order: 850 --- Publishing a great blog post shouldn't require copying and pasting content between platforms or wrestling with WordPress's editor. If you're managing a blog, you want to focus on writing compelling content and optimizing for SEO, not dealing with the technical details of getting words onto your website. That's why Quotient's WordPress integration lets you write your blog posts in Quotient and publish them directly to your WordPress site with one click. Make edits in Quotient, and your WordPress post updates automatically. Add a featured image in Quotient, and it uploads to WordPress without you lifting a finger. The whole workflow becomes seamless, letting you focus on what matters: creating great content. ## Core Concepts When you connect WordPress to Quotient, here's how the pieces fit together: **WordPress Site Connection** Your WordPress site connects to Quotient using Application Passwords, a secure authentication method built into WordPress. Unlike traditional integrations that require OAuth, WordPress uses simple username and password authentication designed specifically for apps like Quotient. This means no redirect URLs, no expiring tokens, just straightforward, reliable access. **Field Mappings** Field mappings control which information from your Quotient blog goes where on your WordPress site. For example, you might map your Quotient blog title to the WordPress post title, and your Quotient tags to WordPress tags. Quotient sets up sensible defaults automatically (title to title, content to content, etc.), but you can customize these if your WordPress setup uses custom fields or has special requirements. **Sync Status** Once you publish a blog to WordPress, Quotient remembers the connection. The button changes from "Publish to WordPress" to "Update WordPress" so you can keep making changes in Quotient and push updates to your live WordPress post. Quotient tracks which Quotient blog corresponds to which WordPress post ID, so updates always go to the right place. ## Common Workflows Here's how most teams use the WordPress integration day-to-day: 1. **Write your blog in Quotient.** Use Quotient's collaborative writing features, AI assistance, and content planning tools to craft your post. 2. **Add your featured image and tags.** Upload your hero image and add relevant tags for SEO. 3. **Click "Publish to WordPress."** Quotient sends your content to WordPress as a draft post. You can review it in WordPress and manually publish when ready. 4. **Make edits in Quotient as needed.** If you spot a typo or want to update the content, edit it in Quotient and click "Update WordPress" to sync your changes. This workflow works whether you're publishing one blog post a week or managing dozens of posts across multiple WordPress sites. The integration handles the busy work of moving content between platforms so you can focus on writing and strategy. ## Getting Started Ready to connect WordPress? The setup takes about 5 minutes: 1. **[Connect Your WordPress Site →](/docs/wordpress/setup)** - Create an Application Password and [link your WordPress site to Quotient](/s/most-recent-business/integrations/wordpress) 2. **[Publish Your First Blog →](/docs/wordpress/syncing)** - Send a blog post from Quotient to WordPress If you run into issues, check out the **[Troubleshooting Guide →](/docs/wordpress/troubleshooting)** for solutions to common connection problems. -- End of: /wordpress/index -- Start of: /wordpress/setup --- title: WordPress Setup Guide description: Connect your WordPress site to Quotient in 5 minutes order: 851 --- Connecting your WordPress site to Quotient takes about 5 minutes. You'll need admin access to your WordPress dashboard and a self-hosted WordPress site (not WordPress.com). If you're not sure whether your site is self-hosted, don't worry - we'll help you figure that out as we go. The connection process involves three main steps: updating your WordPress permalink settings, creating an Application Password for Quotient to use, and entering your credentials in Quotient. Let's walk through each one. ## Step 1: Update Your WordPress Permalink Settings WordPress needs to have "pretty URLs" enabled for Quotient to work properly. By default, some WordPress installations use "plain" permalinks (URLs that look like `?p=123`), but Quotient requires the more readable "post name" format (URLs that look like `/my-blog-post`). Log into your WordPress admin dashboard and navigate to **Settings → Permalinks**. You'll see several options for how WordPress structures your URLs. Select **"Post name"** if it's not already selected, then click **"Save Changes"** at the bottom of the page. ![WordPress Permalinks Settings](/screenshots/wordpress/permalinks-settings.png) Don't worry - changing this setting won't break your existing links. WordPress automatically redirects old URLs to new ones, so any links to your site will continue to work. ## Step 2: Create an Application Password Application Passwords are a secure way for apps like Quotient to access your WordPress site without using your main login password. Think of it like creating a key specifically for Quotient - you can revoke it anytime without changing your main password. In your WordPress admin, go to **Users → Your Profile** (or **Users → Profile** depending on your WordPress version). Scroll down until you see the "Application Passwords" section. Type **"Quotient"** in the name field so you'll remember what this password is for later, then click **"Add New Application Password"**. ![Application Password Creation](/screenshots/wordpress/app-password-create.png) WordPress will generate a password that looks something like `abcd efgh ijkl mnop qrst uvwx`. Copy this password immediately and save it somewhere safe - you won't be able to see it again after you close this page. Important Save this password somewhere safe - you won't be able to see it again! If you lose it, you'll need to create a new one. ## Step 3: Connect to Quotient Now that you have your Application Password, you can connect your WordPress site to Quotient. In Quotient, navigate to **[Settings → Integrations](/s/most-recent-business/integrations)** and find the WordPress card. Click **"Connect"** to open the connection dialog. You'll need to enter three pieces of information: - **Website URL**: Your WordPress site's address, like `https://yoursite.com`. Make sure to include the `https://` and don't add a trailing slash at the end. - **Username**: Your WordPress username - this is the same username you use to log into your WordPress admin dashboard. - **Password**: The Application Password you just created in Step 2. After you enter your credentials, click **"Connect WordPress"**. Quotient will test the connection to make sure everything is working properly. This usually takes just a few seconds. ## Understanding Field Mappings Once you're connected, Quotient automatically configures field mappings that work for most WordPress sites. Field mappings determine which information from your Quotient blog goes into which fields on your WordPress site. For example, your Quotient blog title maps to the WordPress post title, your blog content maps to the WordPress post content, and so on. The default mappings cover the essentials: - **Title** → WordPress post title - **Content** → WordPress post content - **Summary** → WordPress excerpt (used for SEO and previews) - **Tags** → WordPress tags - **Featured Image** → WordPress featured image Most users never need to change these mappings - they work great out of the box. However, if your WordPress site uses custom fields or you want to map additional information, you can customize the mappings in **[Settings → Integrations → WordPress](/s/most-recent-business/integrations/wordpress)** under the "Field Mappings" tab. ## You're All Set That's it! Once your WordPress site is connected, you'll see a new "Publish to WordPress" button when you're viewing any blog post in Quotient. This button lets you send your finished content directly to WordPress without any copy-pasting or manual work. Ready to publish your first blog? Check out the [Publishing Guide](/docs/wordpress/syncing) to learn how to send your content to WordPress. ## Troubleshooting Common Setup Issues If you encounter problems during setup, here are the most common issues and their solutions: **"Connection failed" error** - This usually means your permalinks aren't configured correctly, or there's an issue with your credentials. Double-check that you selected "Post name" in your permalink settings, that you're using your WordPress username (not "Quotient" or any other application name), and that you copied the Application Password exactly as shown. **"Permission denied" error** - Your WordPress user account needs to be an Administrator or Editor to publish posts. If you're seeing this error, check your WordPress user role in **Users → All Users** and make sure you have the right permissions. If you're not an admin on the site, ask whoever manages your WordPress to grant you Editor or Administrator access. If you're still having trouble, the [Troubleshooting Guide](/docs/wordpress/troubleshooting) has detailed solutions for these and other issues. -- End of: /wordpress/setup -- Start of: /wordpress/syncing --- title: Publishing Blogs to WordPress description: Learn how to publish your Quotient blogs to WordPress with one click order: 854 --- Once your WordPress site is connected to Quotient, publishing your finished blog posts is straightforward. The integration handles all the technical details of uploading content, images, and metadata to WordPress, so you can focus on creating great content. ## Publishing Your First Blog When you're ready to publish a blog post to WordPress, open the blog in Quotient and look for the "Publish to WordPress" button near the top of the page. Before you click it, take a moment to make sure your blog is ready. Add a featured image if you haven't already - featured images make your blog posts more engaging and help with social media sharing. Include relevant tags for SEO, and make sure you've written a good summary that will appear in search results and previews. ![WordPress Sync Button](/screenshots/wordpress/sync-button.png) When you click "Publish to WordPress," Quotient sends your content to WordPress and creates a new post. The publishing process usually takes 10-30 seconds depending on how many images need to be uploaded. Your blog post will be created as a draft in WordPress, giving you a chance to review how it looks on your site before making it live to your audience. ## What Gets Published to WordPress When Quotient publishes a blog to WordPress, it sends all the essential elements of your post based on your field mappings. Your blog title becomes the WordPress post title, your content is converted to properly formatted HTML, and any images in your post are automatically uploaded to your WordPress media library. If you've added a featured image in Quotient, it gets uploaded and set as the WordPress featured image. Your tags map to WordPress tags, and your blog summary becomes the WordPress excerpt, which is used for SEO and post previews. The field mappings you configured during setup control exactly what information goes where. Most users stick with the defaults, but if you've customized your mappings to include custom fields or specific WordPress metadata, those will be included as well. ## Updating Published Blogs One of the most useful features of the WordPress integration is the ability to update your published posts. If you spot a typo, want to add more content, or need to update information in a blog post that's already on WordPress, you can make your changes in Quotient and sync them back to WordPress. After you've published a blog once, the "Publish to WordPress" button changes to "Update WordPress." When you click it, Quotient finds the existing WordPress post and updates it with your changes. This is much easier than manually copying edits from Quotient into WordPress's editor. It's worth noting that if you make edits directly in WordPress after publishing from Quotient, those changes will be overwritten the next time you update from Quotient. For this reason, we recommend treating Quotient as the source of truth and making all your edits there. If you need to make WordPress-specific changes that Quotient doesn't support, make those changes in WordPress after you're done updating from Quotient. ## Publishing Best Practices Before you publish, take a few minutes to double-check your content. Proofread your text carefully - while you can update the post later, it's better to get it right the first time. Make sure your featured image looks good and is appropriately sized for your WordPress theme. Check that your tags are relevant and will help readers find your content. And review your summary to ensure it accurately represents your post and includes important keywords for SEO. After publishing, visit your WordPress site to see how the post looks in your theme. Sometimes formatting that looks great in Quotient needs minor adjustments to work perfectly with your specific WordPress design. If everything looks good, you can manually publish the post from draft to live in WordPress. Then share your new post on social media or in your newsletter to get it in front of your audience. ## Common Questions **How long does publishing take?** Publishing typically takes 10-30 seconds. If your blog has several large images, it might take a bit longer as Quotient uploads each image to your WordPress media library. You'll see a progress indicator while the sync is happening. **What status do posts get published as?** All posts are published to WordPress as drafts, not as live published posts. This gives you a chance to review how the post looks on your site and make any final adjustments before making it live to your audience. When you're ready, you can manually publish the post in your WordPress admin dashboard. **Can I edit the blog in WordPress after publishing?** Yes, you can edit the post directly in WordPress. However, if you later update the post from Quotient, your WordPress changes will be overwritten. It's best to treat Quotient as your source of truth and make all edits there. Think of WordPress as the publishing platform and Quotient as your content management and editing platform. **What happens if publishing fails?** If publishing fails, Quotient will show you an error message explaining what went wrong. Common issues include connection problems, permission errors, or issues with specific images. Check the [Troubleshooting Guide](/docs/wordpress/troubleshooting) for solutions to specific error messages. You can always try publishing again once you've resolved the issue. **Can I publish the same blog to multiple WordPress sites?** Not directly from a single blog post. If you need to publish the same content to multiple WordPress sites, you'll need to create separate blog posts in Quotient for each site. However, you can use the duplicate feature to copy a blog and then publish each copy to a different WordPress site. ## Related Topics -- End of: /wordpress/syncing -- Start of: /wordpress/troubleshooting --- title: WordPress Troubleshooting description: Fix common WordPress connection and publishing issues order: 852 --- If you're having trouble connecting your WordPress site to Quotient or publishing blog posts, you're not alone. Most WordPress connection issues come down to a few common problems that are easy to fix once you know what to look for. This guide walks through the most frequent issues and their solutions. ## Connection Problems ### "Connection failed" Error The most common cause of connection failures is that your WordPress site has permalinks set to "Plain" rather than "Post name." WordPress needs to use pretty URLs for Quotient to communicate with it properly. To fix this, log into your WordPress admin and go to **Settings → Permalinks**. Select **"Post name"** instead of "Plain," then click **"Save Changes"** at the bottom of the page. After making this change, return to Quotient and try connecting again. Another common cause is entering your site URL incorrectly. Make sure you're including the `https://` at the beginning and that you're not adding a trailing slash at the end. The URL should look like `https://yoursite.com`, not `https://yoursite.com/` or `yoursite.com`. ### "Permission denied" Error If you're seeing a "Permission denied" error, it means the WordPress user account you're trying to connect with doesn't have sufficient permissions to create and edit posts. WordPress requires that the user be either an Administrator or an Editor to use Quotient. First, double-check that you're using your actual WordPress username - the one you log in with - not the word "Quotient" or any other application name. If you're certain you're using the right username, you'll need to check your user role in WordPress. Log into your WordPress admin and go to **Users → All Users**. Find your account in the list and check what role you have. If you're not an Administrator or Editor, you'll need to ask whoever manages your WordPress site to upgrade your permissions. ### "Invalid username or password" Error This error means that either your username or your Application Password is incorrect. Start by verifying that you're using your WordPress username correctly - this is the username you use to log into your WordPress dashboard, not your email address or display name. If your username is correct, the issue is likely with the Application Password. Application Passwords are long strings that look like `abcd efgh ijkl mnop qrst uvwx`, and it's easy to accidentally miss a character when copying them. The simplest solution is to create a fresh Application Password. Go to **Users → Your Profile** in WordPress, scroll down to the "Application Passwords" section, create a new one called "Quotient," and copy the new password carefully. Then try connecting again in Quotient with the new password. ## Publishing Problems ### Blog Doesn't Appear on WordPress If you've successfully published a blog from Quotient but can't find it on your WordPress site, don't panic. The most likely explanation is that the post was created as a draft, which is the expected behavior. Log into your WordPress admin and go to **Posts → All Posts**. Look for your post in the list - it should be there with a "Draft" status. You can then review the post and manually publish it when you're ready. Sometimes it takes a few moments for the post to appear in WordPress's admin interface, especially if your WordPress site is on a slower hosting plan. Give it a minute and refresh the page. If the post still doesn't appear after a few minutes, check the Quotient interface to see if there was an error message during publishing. In rare cases, the post might be published but not visible on your site's homepage because of your WordPress theme's settings or because it was assigned to a category that's not displayed on the front page. Check your WordPress theme settings and make sure the post is in a category that appears on your site. ### Images Not Showing Up If your blog text appears on WordPress but the images are missing, this usually means that either the images failed to upload or your WordPress installation doesn't allow the image file type. JPG and PNG images work with virtually all WordPress sites, but some hosting providers restrict certain file types or have file size limits. Try using JPG or PNG format for your images, and make sure each image is under 5MB. Very large images can fail to upload, especially on hosting plans with strict resource limits. If you're working with high-resolution images, compress them before adding them to Quotient. There are many free online tools for image compression that can reduce file sizes without noticeably affecting quality. If specific images continue to fail, try uploading them directly to WordPress's media library to see if you get a more specific error message about what's preventing the upload. ### Publishing Is Very Slow Publishing can take anywhere from a few seconds to a minute or more, depending on your blog and your WordPress hosting. This is normal, especially if your blog contains multiple large images. Each image needs to be uploaded to your WordPress media library, which takes time. If publishing consistently takes more than a minute, consider compressing your images before adding them to Quotient. Smaller image files upload much faster. You might also want to look at your WordPress hosting plan - slower shared hosting plans can struggle with handling uploads, while managed WordPress hosting from providers like WP Engine or Kinsta typically handles uploads much more quickly. ## Understanding WordPress.com vs. Self-Hosted WordPress One source of confusion that often leads to connection errors is the difference between WordPress.com and self-hosted WordPress. These are two different things, and Quotient only works with self-hosted WordPress. **WordPress.com** is a hosting service run by Automattic where you can create a WordPress site without managing your own hosting. If your site address looks like `yoursite.wordpress.com`, you're using WordPress.com. These sites have limited access to the WordPress REST API unless you pay for a Business plan, which means Quotient can't connect to them in most cases. **Self-hosted WordPress** refers to WordPress software that you've installed on your own web hosting. These sites typically have custom domains like `yoursite.com` and give you full control over plugins, themes, and settings. Self-hosted WordPress works perfectly with Quotient. Common hosting providers for self-hosted WordPress include WP Engine, Bluehost, SiteGround, Kinsta, and many others. If you're not sure which type you have, check your site's URL. If it ends in `.wordpress.com` and you can't install plugins freely, you're likely on WordPress.com and will need to either upgrade to a Business plan or move to self-hosted WordPress to use Quotient. ## Getting Additional Help If you've tried the solutions above and are still having problems, here are some steps to take before reaching out for support. First, try disconnecting and reconnecting your WordPress site in Quotient. Sometimes connection issues resolve themselves when you establish a fresh connection. Go to **Settings → Integrations → WordPress** in Quotient, disconnect your site, and then go through the connection process again with a new Application Password. Test whether the problem is specific to a particular blog or affects all your content. Try publishing a very simple blog post with just text and no images. If that works but a complex post with many images doesn't, you've narrowed down the problem to something specific about that content. Finally, verify that you can create posts normally in your WordPress admin. If you can't create or edit posts when logged into WordPress directly, the issue is with your WordPress installation rather than with Quotient. You'll need to resolve the WordPress issue first before the integration can work. If you need to contact support, include these details in your message: your WordPress site URL, the exact error message you're seeing in Quotient, whether you're using WordPress.com or self-hosted WordPress, and what hosting company you use if you know. This information helps support diagnose the issue much more quickly. ## Quick Troubleshooting Checklist Before you try anything else, run through this quick checklist to make sure all the basics are covered: - WordPress permalinks are set to "Post name" (not "Plain") - You're using your actual WordPress username, not "Quotient" or any other name - Your WordPress user account is an Administrator or Editor - You copied the Application Password exactly as shown, including all spaces - Your WordPress site is self-hosted, not WordPress.com - You can create and edit posts normally in your WordPress admin - Your site URL in Quotient includes `https://` and doesn't have a trailing slash If you can check all of these boxes and are still having issues, the problem is likely something more specific that will require deeper troubleshooting or support assistance. -- End of: /wordpress/troubleshooting -- Start of: /email/dns/cloudflare-guide --- title: Cloudflare description: How to set up your DNS records in Cloudflare. --- ### Step 1: Access DNS Settings Log into your Cloudflare account and navigate to the DNS settings for your domain. ![DNS Settings](/screenshots/email/cloudflare-1.png) ### Step 2: Navigate to the Records page under Domain Click on "Add record" to begin adding the necessary email DNS records. ![Add Records](/screenshots/email/cloudflare-2.png) ### Step 3: Configure MX Records Add the TX and MX records that will direct email to the correct mail servers. ![MX Records](/screenshots/email/cloudflare-3.png) -- End of: /email/dns/cloudflare-guide -- Start of: /email/dns/godaddy-guide --- title: GoDaddy description: How to set up your DNS records in GoDaddy. --- ![GoDaddy DNS Management Overview](/screenshots/email/godaddy-overview.png) ### Step 1: Access Your Domain Settings Navigate to your GoDaddy domain management page and find your domain. ![GoDaddy Domain List](/screenshots/email/godaddy-domain.png) ### Step 2: Open DNS Management Click on the "DNS" or "Manage DNS" button to access your domain's DNS settings. ![GoDaddy Domain DNS Settings](/screenshots/email/godaddy-domain-detail.png) ### Step 3: Click on the "Add Record" button Click on the "Add New Record" button to add the email hosting records. ![GoDaddy Add DNS Record Button](/screenshots/email/godaddy-add-new-record.png) ### Step 4: Add MX and TXT Records ( DKIM and SPF ) Enter the required MX and TXT records from Quotient. ![GoDaddy Add MX Record Form](/screenshots/email/godaddy-add-new-mx.png) ### Step 5: Verify Settings Review your DNS settings to ensure all records are properly configured. ![GoDaddy DNS Records Overview](/screenshots/email/godaddy-email-host2.png) -- End of: /email/dns/godaddy-guide -- Start of: /email/dns/index --- title: Custom DNS description: Learn how to set up your custom DNS in Quotient. --- Email deliverability is critical to the success of your communications. Using a custom DNS for email not only reinforces your brand identity but also plays a vital role in ensuring that your messages reach inboxes reliably. This page provides an introduction to best practices for email deliverability through proper DNS configuration and outlines the process for setting up your DNS in Quotient. ## Best Practices for Email Deliverability Setting up a custom DNS is a cornerstone for improving email deliverability. Here are some key best practices: - **Authenticate Your Domain:** Use SPF, DKIM, and DMARC records to verify that your emails are sent from trusted servers. This helps prevent spoofing and reduces the risk of your emails being marked as spam. - **Ensure Proper DNS Configuration:** Configure the necessary DNS records (MX, CNAME, TXT) correctly. Incorrect entries can lead to delays or failures in email delivery. - **Monitor and Maintain Your DNS Records:** Regularly review your DNS settings to ensure that all records are up-to-date. Changes in your infrastructure or email service may require DNS updates. - **Leverage a Custom DNS for Brand Consistency:** Custom DNS entries enhance your brand’s credibility and allow you greater control over email authentication, ultimately contributing to improved deliverability and user trust. ## Setting Up Custom DNS in Quotient This section will guide you through the process of configuring your DNS settings specifically in Quotient. Detailed instructions, screenshots, and troubleshooting tips will be provided to ensure a smooth setup experience. 1. Navigate to the **[Email Settings](/s/most-recent-business/email-settings)** via the left hand navigation. ![Properties Page](/screenshots/email/quotient-email-nav.png) 2. Scroll down to the Email Domains section. ![Properties Page](/screenshots/email/quotient-email-domain.png) 3. Click the "Add Domain" button to add a new domain. Fill out the domain you want to use as your "From" address. ![Properties Page](/screenshots/email/quotient-add-domain.png) 4. After you click "Add Domain", you will be redirected to the domain details page. ![Properties Page](/screenshots/email/quotient-email-domain-detail.png) 5. Copy the "Domain" and "MX Record" values to your DNS provider. Here are the guides for the most popular DNS providers: - [Shopify](/docs/email/dns/shopify-guide) - [Namecheap](/docs/email/dns/namecheap-guide) - [GoDaddy](/docs/email/dns/godaddy-guide) - [Cloudflare](/docs/email/dns/cloudflare-guide) - [Squarespace](/docs/email/dns/squarespace-guide) Once you have added the MX and TXT records to your DNS provider, navigate back to the email domain details page and click the "Verify" button. 6. Hit refresh on the email domain list or details. This can take a few minutes and up to a few hours to verify. ![Properties Page](/screenshots/email/quotient-domain-row.png) 7. Once verified, you will see the domain details a verified status and you are free to begin sending email from your domain. -- End of: /email/dns/index -- Start of: /email/dns/namecheap-guide --- title: Namecheap description: How to set up your DNS records in Namecheap. --- ### Step 1: Access Domain List Log into your Namecheap account and navigate to your domain list. ![Domain List](/screenshots/email/namecheap-domain-list.png) ### Step 2: Access Domain Settings Click on the "Manage" button next to your domain to access its settings. ![Domain Management](/screenshots/email/namecheap-domain.png) ### Step 3: Access Advanced DNS Click on "Advanced DNS" to add or modify your domain's DNS records. ![Advanced DNS](/screenshots/email/namecheap-advanced-dns.png) ### Step 4: Add MX and TX Records Add the required MX and TX records for your email service. ![MX Records](/screenshots/email/namecheap-add-tx.png) ### Step 4: Add MX Records Add the required MX records for your email service. ![MX Records](/screenshots/email/namecheap-add-mx.png) ### Step 5: Verify DNS Records Double check your DNS records to ensure they are properly configured. ![Email Host Settings](/screenshots/email/namecheap-email-host.png) -- End of: /email/dns/namecheap-guide -- Start of: /email/dns/shopify-guide --- title: Shopify description: How to set up your DNS records in Shopify. --- ### Step 1: Access Domain Settings Log into your Shopify admin panel and navigate to the Domains section. ![Domain Overview 2](/screenshots/email/shopify-domain-overview.png) ### Step 2: Select Domain Click on the domain you want to configure from your domain list. ![Domain List](/screenshots/email/shopify-domain-list.png) ### Step 3: Access DNS Settings In the domain details page, you'll find your current DNS configuration. ![Domain Details](/screenshots/email/shopify-domain-detail.png) ![Edit Domain](/screenshots/email/shopify-edit-domain-button.png) ### Step 4: Add New DNS Record ![Record Overview](/screenshots/email/shopify-record-overview.png) Click the "Add Record" button to create a new DNS entry. ![Add Record](/screenshots/email/shopify-add-record.png) ### Step 7: Add TXT and MX Records Add any required TXT records for email authentication. ![TXT Records](/screenshots/email/shopify-txt-record.png) Do the same thing for the MX record and then verify the configuration. -- End of: /email/dns/shopify-guide -- Start of: /email/dns/squarespace-guide --- title: Squarespace description: How to set up your DNS records in Squarespace. --- ### Step 1: Access Your Domain Settings Navigate to your Squarespace domain management page and find your domain. ![Properties Page](/screenshots/email/squarespace-dns-settings.png) ### Step 2: Add MX and TXT Records ( DKIM and SPF ) Click on the "Add New Record" button to add the email hosting records. ![Properties Page](/screenshots/email/squarespace-add-record.png) ### Step 3: Verify Settings Review your DNS settings to ensure all records are properly configured. ![Properties Page](/screenshots/email/squarespace-verify-dns.png) -- End of: /email/dns/squarespace-guide -- Start of: /email/variables/conditional-components --- title: Conditional Components description: How to create and use conditional components in emails --- ## Overview Conditional components allow you to show or hide email components based on [email variable](/docs/email/variables/index) values. ### Building Conditional Components Navigate into the **Email Template Editor** and select a component that you wish to display conditionally. In the example below we are selecting the container of our "Special VIP Offer" component. After selecting the component, we'll navigate to the **Conditional Rendering** section in the **Style Editor** and click on the button in the **Style Editor** labeled "Add Conditions" ![Build Conditionals Image](/screenshots/build-conditional.png) This will pull up our **Conditional Editor** where we can add, remove, and edit the conditions that control whether "Special VIP Offer" will display. Here, we've decided that we want this VIP section to display if the email recipient has spent over $5000 or has more than 10 orders. Other recipients will not see this section. ![Add Conditional](/screenshots/add-conditions.png) After creating the conditionals and saving our changes, we can navigate to the **Preview Tab** to see how our email looks depending on our email variable values. In this case we are interested in `{{customer.total_spent}}` and `{{customer.order_count}}`. When we first navigate to the **Preview Tab**, we select a customer to test the email against, in this case "Ayumu Hirano." Ayumu has not spent or ordered with us, so the email that would be sent to her, does not contain our VIP section. ![Preview Ayumu No Spend](/screenshots/preview-ayumu-no-spend.png) We'd like to see what the email would look like if Ayumu had satisfied our conditions, so we'll adjust her `{{customer.total_spent}}` to $7000 (this will not affect Ayumu's underlying data and is only applied for the preview). As we can see, if Ayumu had spent $7000 with us, the email that she receives would contain our VIP section! ![Preview Ayumu 7k](/screenshots/preview-ayumu-7k.png) ## Related Topics -- End of: /email/variables/conditional-components -- Start of: /email/variables/index --- title: Email Variables description: How to use variables in email templates. --- Our email templating system allows you to insert dynamic variables into your email templates using the `{{topic.variable}}` format. These variables will be replaced with actual data when the email is sent. This ensures that your emails are personalized and relevant to each recipient. ## Available Variables ### Business Variables You can reference the following variables to insert business-related details: - `{{business.name}}` - The name of the business - `{{business.brandName}}` - The brand name of the business - `{{business.logoId}}` - The ID of the business logo - `{{business.socialLinkFacebook}}` - Facebook link of the business - `{{business.socialLinkInstagram}}` - Instagram link of the business - `{{business.socialLinkPinterest}}` - Pinterest link of the business - `{{business.socialLinkTwitter}}` - Twitter link of the business - `{{business.socialLinkTikTok}}` - TikTok link of the business - `{{business.socialLinkLinkedIn}}` - LinkedIn link of the business - `{{business.domain}}` - The business domain name - `{{business.websiteScreenshotUrl}}` - Screenshot URL of the business website - `{{business.fullAddress}}` - The full address of the business - `{{business.phoneNumber}}` - The phone number of the business - `{{business.emailAddress}}` - The email address of the business ### Person Variables These variables reference persons stored in our system: - `{{person.id}}` - Unique identifier for the person - `{{person.firstName}}` - First name from the person - `{{person.lastName}}` - Last name from the person - `{{person.emailAddress}}` - Email address from the person - `{{person.countryCode}}` - Country code from the person - `{{person.regionCode}}` - Region code from the person - `{{person.city}}` - City from the person - `{{person.timezones}}` - Timezones from the person - `{{person.phone}}` - Phone from the person - `{{person.totalSpent}}` - The total spending of the person - `{{person.ordersCount}}` - The total number of orders of the person If your business has custom person properties set up, you can reference them using: - `{{person.properties.}}` - Custom person property ### Campaign Variables (Optional) If enabled, you can reference campaign-related details: - `{{campaign.id}}` - Unique campaign ID - `{{campaign.name}}` - Campaign name - `{{campaign.description}}` - Campaign description - `{{campaign.start_date}}` - Campaign start date - `{{campaign.end_date}}` - Campaign end date ### Event Variables (Only Available in Email Templates) These variables reference events that triggered the email: - `{{event.emailAddress}}` - Email address of the recipient - `{{event.eventType}}` - Type of event that triggered the email - `{{event.pathname}}` - Pathname of the event occurrence - `{{event.referrerUrl}}` - URL of the referrer - `{{event.timestamp}}` - Event timestamp - `{{event.deviceId}}` - Device ID of the user - `{{event.sessionId}}` - Session ID - `{{event.userAgent}}` - User agent string - `{{event.pageUrl}}` - URL of the page - `{{event.clickUrl}}` - URL that was clicked - `{{event.productHandle}}` - Product handle related to the event - `{{event.productId}}` - Product ID - `{{event.cartId}}` - Cart ID - `{{event.emailId}}` - Email ID associated with the event - `{{event.orderId}}` - Order ID - `{{event.variantId}}` - Variant ID of the product - `{{event.searchQuery}}` - Search query performed by the user - `{{event.browserName}}` - Name of the browser - `{{event.city}}` - City of the user - `{{event.country}}` - Country of the user - `{{event.zip}}` - ZIP code - `{{event.timezone}}` - User's timezone - `{{event.region}}` - User's region - `{{event.regionName}}` - Name of the region - `{{event.isp}}` - Internet Service Provider - `{{event.operatingSystem}}` - Operating system used - `{{event.hashedIp}}` - Hashed IP address ### Current Date Variables The system provides access to current date information in various formats: - `{{currentDate.date}}` - Full formatted date (e.g., "December 25, 2024") - `{{currentDate.year}}` - Current year as a number (e.g., 2024) - `{{currentDate.month}}` - Current month name (e.g., "December") - `{{currentDate.day}}` - Current day of month as a number (e.g., 25) ### AI Variables These variables are only available in email templates that are sent by an AI Email step in a flow execution: - `{{ai.productId}}` - Product ID - `{{ai.message}}` - Custom message ## Best Practices - Use only the variables listed above. Using unrecognized variables may cause emails to render incorrectly. - Always use `{{business.id}}` instead of the literal business ID to avoid errors. - Ensure that all necessary variables are present in your template before sending emails. By following this guide, you can leverage dynamic templating to create personalized and data-driven campaigns. ## Related Topics -- End of: /email/variables/index --- # Use Cases ## Create an ABM campaign for a specific prospect Build a hyper-personalized campaign for one target account — Company X. Research that company and its key stakeholders, then create a multi-channel campaign (email, content, social) tailored to their initiatives, pain points, and buyer roles so you can land and expand that account. ### Implementation Details Start by naming the account you want to target — a specific company (e.g. Acme Corp, a named enterprise prospect). Work with the Quotient agent to research that **single account**: key stakeholders (decision-makers, champions, blockers), recent company initiatives, earnings or press, and pain points that your solution addresses. Use firmographic data and engagement history if the account is already in your CRM. Once you have the account and stakeholder picture, collaborate with the Quotient agent to build an ABM campaign for that prospect. Create personalized email sequences, content angles, and social touchpoints that speak directly to Company X's industry, strategic priorities, and the different roles you need to influence (e.g. C-suite, practitioners, technical buyers). Run a defined motion — e.g. a 6-week campaign — with clear next steps so you can measure progress and iterate. ### Starter Prompt I want to run an ABM campaign for [Company X] — they're a [industry/size] company we're targeting. Help me research key stakeholders there, their recent initiatives and pain points, then build a 6-week campaign with personalized email sequences and content for different buyer personas at that account. --- ## Run always-on thought leadership campaigns Schedule an AI Job to run every week: the Quotient agent checks what's happening in your industry, creates a campaign with the research in the brief, and adds tasks for the deliverables (blog, email, social) so you can review and run thought leadership that reacts to the moment. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add your brand voice, competitive positioning, industry focus, and author profiles so the campaigns align with your theses and voice. - **Industry and theses defined:** Know your industry and the 2–3 ideas you want to own (e.g. "AI-native beats legacy marketing tools"). The job will look for what's happening in your space and create campaigns that tie current events to those theses. - **Channels in mind:** Decide which channels you typically use (blog, email, LinkedIn, X) so the job adds the right tasks to each campaign. ## How to do it in Quotient ### 1. Navigate to AI Jobs Go to the Jobs page under the AI Jobs section in the sidebar, or ask Quotient in chat to create a recurring job for you. ### 2. Write your prompt for the weekly job For any evergreen or automated campaign, the pattern in Quotient is: create an **AI Job** on an interval; when it runs, create a **campaign** (put the research and context in the brief) and add **tasks** to that campaign for each deliverable. Tasks are the units of work — when you run them, the Quotient agent produces the actual content (documents, emails, posts). So the job creates the campaign and the tasks; you review and then kick off the tasks. Write the instructions you want the Quotient agent to follow each week. The job should: (1) research what's happening in your industry that week, (2) create a campaign with that research in the brief, and (3) add tasks to the campaign for each deliverable. For example: > "Every Monday at 9am, research what's been happening in [your industry] over the past week — news, trends, competitor moves, or conversations that matter to our audience. Then create a campaign: put the research and 1–2 timely angles we could own in the campaign brief (tied to our core theses from the Memories), and add tasks for a blog post, an email angle, and 2–3 LinkedIn/X posts." ### 3. Set your schedule Choose when the job runs — typically weekly (e.g. every Monday morning) so you get a fresh campaign in time to plan the week or month. The agent will execute the prompt automatically at the scheduled time. ### 4. Review the campaign and run the tasks Each run creates a real campaign with a brief (including the research) and tasks for each deliverable. Review the brief and the tasks; edit if needed, then assign or kick off the tasks so the Quotient agent produces the content. You stay in control of what goes out. ## What you'll get Each weekly run produces: - **A campaign** — with a brief that includes the industry research and 1–2 timely angles tied to your theses - **Tasks on that campaign** — one task per deliverable (e.g. blog post, email, LinkedIn/X posts) so you can execute in one place - **Consistent opportunity detection** — you never miss a moment to lead the conversation; review and run when it fits ## Tips for better results - **Be specific about your industry.** "B2B SaaS marketing" or "healthcare IT" helps the agent find the right signals. Include competitor names or topics to watch if that helps. - **Tie the brief to your theses.** In the job prompt, reference your core positioning so the campaign brief reinforces your brand instead of chasing every trend. - **Edit the brief or tasks before kicking off.** The job creates the campaign and tasks; you can refine the brief or add/remove tasks before execution. ### Starter Prompt Create a recurring AI Job for the Quotient agent: every Monday at 9am, research what's been happening in [your industry] over the past week — news, trends, competitor moves, or conversations that matter to our audience. Then create a campaign: put the research and 1–2 timely angles we could own in the campaign brief (tied to our core theses from the Memories), and add tasks to that campaign for a blog post, an email angle, and 2–3 LinkedIn/X posts. I'll review the campaign and kick off the tasks when ready. --- ## Run always-on social campaign for executives Schedule an AI Job to run every week: the Quotient agent researches topics in your industry that your CEO (or other executive) should post about, then creates a post in their voice so they stay visible and relevant without hunting for ideas. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add the executive's voice, past posts, and areas of expertise so the Quotient agent can write in their style. - **Author profile created:** Create a profile for the executive (e.g. CEO) whose account will post. Include tone, topics they own, and any guardrails. - **Social accounts connected:** Connect the executive's LinkedIn and X accounts so the draft can be reviewed and published from Quotient. ## How to do it in Quotient ### 1. Navigate to AI Jobs Go to the Jobs page under the AI Jobs section in the sidebar, or ask Quotient in chat to create a recurring job for you. ### 2. Write your prompt for the weekly job The job should: (1) research what's happening in your industry that week — topics, trends, or conversations the executive could weigh in on — and (2) create a post for the executive based on that research, in their voice. For example: > "Every Monday at 9am, research what's been happening in [your industry] over the past week — trends, news, or conversations that would be relevant for our CEO to comment on. Pick one topic that fits their expertise and point of view. Then create a LinkedIn post for our CEO's personal account in their voice (use their author profile and past posts from the Memories). 150-200 words, value-focused, 2-3 hashtags. Create a draft for review before publishing." ### 3. Set your schedule Choose when the job runs — typically weekly (e.g. every Monday morning) so the executive gets one timely post idea and draft. You can run it more often (e.g. twice weekly) if you want more options to choose from. ### 4. Review and publish Each run produces one draft post. The executive (or their team) reviews, edits if needed, and publishes. Because the topic is researched that week, the post stays relevant to what's going on in the industry. ## What you'll get Each weekly run produces: - **Industry-relevant topic** — based on that week's research, so the executive is commenting on what's current - **A draft post** — in the executive's voice, ready to edit and publish (single deliverable — no campaign needed) - **Consistent presence** — the executive never runs out of timely ideas ## Tips for better results - **Be specific about your industry.** "B2B SaaS marketing" or "healthcare IT" helps the agent find the right signals and topics. - **Reference their expertise.** In the job prompt, mention the executive's areas of expertise so the agent picks topics they can speak on with authority. - **Mix platforms.** You can create separate jobs for LinkedIn and X (or one job that outputs both) — each platform has different norms and length. ### Starter Prompt Create a recurring AI Job for the Quotient agent: every Monday at 9am, research what's been happening in [your industry] over the past week — trends, news, or conversations that would be relevant for our CEO to comment on. Pick one topic that fits their expertise. Then create a LinkedIn post for our CEO's personal account in their voice (use their author profile and past posts from the Memories). 150-200 words, value-focused, 2-3 hashtags. Create a draft for review before publishing. --- ## Run always-on video series Create a campaign for your video series, then schedule an AI Job to run every week: the Quotient agent comes up with a new episode idea (that hasn't been used yet), adds it as a document to the campaign, writes the script, and adds the script as a document to the same campaign — so you get a steady pipeline of ideas and scripts without repeating. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add your brand voice, product messaging, and any existing video or script samples so the agent can match tone and depth. - **Series concept defined:** Know the format (e.g. tips in 60 seconds, deep-dive explainers, expert interviews) and the themes you want to cover over time. - **Cadence in mind:** Decide how often the job runs (e.g. weekly) so you get a steady flow of new ideas and scripts. ## How to do it in Quotient ### 1. Create a campaign for the series (one-time) Open a chat with the Quotient agent and create a campaign that will hold the series. Put the series name, format, themes, and audience in the brief. For example: > "Create a campaign for our video series '[e.g. Marketing in 60]'. The brief should describe the format: 60-second tips or takes on topics our audience cares about. Themes: [e.g. marketing automation, content strategy, AI in marketing]. Audience: [e.g. B2B marketing leads]. We'll add episode ideas and scripts to this campaign every week — each as a document." The campaign is the container. You'll add documents (idea + script) to it each week via an AI Job. ### 2. Create an AI Job that runs every week Go to AI Jobs and set up a recurring job. The job should: (1) Look at the campaign and its existing documents so it knows which episode ideas have already been used — do not repeat the same idea twice. (2) Come up with a new, good idea for an episode that fits the series. (3) Add the idea as a document to the campaign. (4) Write the script for that episode and add the script as a document to the same campaign. For example: > "Every Monday at 9am, open the campaign '[series name]' and review the documents already in it so you know which episode ideas we've already used. Come up with one new episode idea that fits the series format and themes and that we have not done before. Add the idea as a document to the campaign (title: e.g. 'Episode idea: [topic]'). Then write the full script for that episode and add the script as a document to the same campaign (title: e.g. 'Script: [topic]'). Do not repeat any idea we've already used." ### 3. Set your schedule Choose when the job runs — typically weekly so you get one new idea + one new script per week. Review the documents, then hand the script to your team to film and edit. ### 4. Review and produce Each run adds two documents to the campaign: the episode idea and the script. You (or your team) review them and produce the video. Because the job checks existing documents, you never get a duplicate idea. ## What you'll get - **One campaign** — the container for the series (brief = format, themes, audience) - **Each weekly run:** One new episode idea (document) + one new script (document) added to that campaign - **No repeated ideas** — the job checks what's already in the campaign and picks something new every time ## Tips for better results - **Keep format consistent in the brief.** Same length, style, and structure make the series recognizable; the agent will match the brief. - **Name documents clearly.** In the job prompt, ask for document titles that include the topic or episode number so you can scan the campaign and avoid duplicates manually if needed. - **Repurpose scripts.** Use the script documents to brief your team; you can also ask the agent to turn scripts into captions, thumbnails, or social posts. ### Starter Prompt First, create a campaign for our video series '[e.g. Marketing in 60]'. Put in the brief: format (e.g. 60-second tips), themes, and audience. Then create a recurring AI Job for the Quotient agent: every Monday at 9am, open that campaign and review the documents already in it so you know which episode ideas we've used. Come up with one new episode idea that fits the series and we have not done before. Add the idea as a document to the campaign, then write the script and add the script as a document to the same campaign. Do not repeat any idea twice. --- ## Run always-on webinar campaigns (script and series) Run a recurring webinar series with the same core topic or format — and let the agent write each webinar for you: topic idea, script, slide outline, and promotion so you fill seats and never repeat the same angle twice. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add your product messaging, demo flow, and any past webinar content so the agent can align scripts and positioning. - **Webinar series concept defined:** Know the format (e.g. "Getting started with X," "Monthly industry roundtable") and themes so the agent can propose fresh topics within that frame. - **Cadence in mind:** Decide how often you'll run (e.g. monthly) so you can set the AI Job to match. ## How to do it in Quotient ### 1. Create a campaign for the webinar series (one-time) Open a chat with the Quotient agent and create a campaign that will hold the series. Put the series name, format, themes, audience, and cadence in the brief. For example: > "Create a campaign for our webinar series '[e.g. Monthly getting started with our platform]'. The brief should describe the format: [e.g. 45-minute product walkthrough with Q&A]. Themes: [e.g. onboarding, first campaign, integrations]. Audience: [e.g. new signups and trial users]. Cadence: monthly. We'll add webinar ideas, scripts, slide outlines, and promotion copy to this campaign every month — each as documents." The campaign is the container. You'll add documents (idea, script, slide outline, invite email, reminder email, social posts) to it each run via an AI Job. ### 2. Create an AI Job that runs on your cadence (e.g. monthly) Go to AI Jobs and set up a recurring job. The job should: (1) Look at the campaign and its existing documents so it knows which webinar ideas have already been used — do not repeat the same idea twice. (2) Come up with a new, good topic or angle for a webinar that fits the series. (3) Add the idea as a document to the campaign. (4) Write the script, slide outline, invite email, reminder email, and social posts for that webinar and add each as documents to the same campaign. For example: > "Every first Monday of the month at 9am, open the campaign '[series name]' and review the documents already in it so you know which webinar ideas we've already used. Come up with one new webinar topic or angle that fits the series format and themes and that we have not done before. Add the idea as a document to the campaign (title: e.g. 'Webinar idea: [topic]'). Then write the full script, a slide outline, an invite email, a reminder email, and 2–3 social posts for this webinar, and add each as a document to the same campaign (titles: e.g. 'Script: [topic]', 'Slide outline: [topic]', 'Invite email: [topic]', etc.). Do not repeat any idea we've already used." ### 3. Set your schedule Choose when the job runs — typically monthly so you get one new webinar idea and full content set per run. Review the documents, then use the script and slide outline to run the webinar and the promotion docs to fill seats. ### 4. Review and produce Each run adds several documents to the campaign: the webinar idea, script, slide outline, and promotion assets. You (or your team) review them and run the webinar. Because the job checks existing documents, you never get a duplicate idea. ## What you'll get - **One campaign** — the container for the series (brief = format, themes, audience, cadence) - **Each run:** One new webinar idea (document) + script + slide outline + invite email + reminder email + social posts (documents) added to that campaign - **No repeated ideas** — the job checks what's already in the campaign and picks a new topic every time ## Tips for better results - **Keep format consistent in the brief.** Same length, style, and structure make the series recognizable; the agent will match the brief and propose topics that fit. - **Name documents clearly.** In the job prompt, ask for document titles that include the topic so you can scan the campaign and avoid duplicates manually if needed. - **For a one-off webinar with full campaign (promote + follow-up),** use "Drive attendance at a webinar" to build the full lifecycle around a single webinar. ### Starter Prompt First, create a campaign for our webinar series '[e.g. Monthly getting started with our platform]'. Put in the brief: format, themes, audience, and cadence (e.g. monthly). Then create a recurring AI Job for the Quotient agent: every [e.g. first Monday of the month] at 9am, open that campaign and review the documents already in it so you know which webinar ideas we've used. Come up with one new webinar topic or angle that fits the series and we have not done before. Add the idea as a document to the campaign. Then write the script, slide outline, invite email, reminder email, and social posts, and add each as a document to the same campaign. Do not repeat any idea twice. --- ## Adapt a campaign for a new industry vertical Take an existing campaign and get a version tailored for one industry — terminology, compliance, use cases, and competitive context so it resonates when you enter or double down on a vertical. ### Implementation Details ## Before you start - **Campaign to adapt:** Have the campaign (or its core assets: brief, key messages, one main email or blog) that you want to verticalize. The clearer the "master" version, the better the vertical adaptation. - **Target vertical:** Choose one industry (e.g. healthcare, financial services, manufacturing, retail). You'll get one vertical-specific version; for multiple verticals, use "Create campaign variants for multiple segments" instead. - **Memories populated:** Product overview and positioning so the agent can keep the core message while layering in vertical nuance. ## How to do it in Quotient Start a conversation with the Quotient agent. Share the campaign you're adapting and the vertical: > "We have a campaign promoting [product/value]. I want to adapt it for [industry]. Research the vertical — terminology, compliance or regulatory angles, and typical pain points — and create a vertical-specific version: updated brief, email variant, and blog or landing page copy that keeps our core message but speaks to [industry] buyers." The agent researches the vertical (regulations, competitive landscape, industry language) and produces adapted deliverables that preserve your positioning while feeling native to the industry. ## What you'll get - **Vertical brief** — same campaign goals and structure, with industry-specific messaging, proof points, and compliance/regulatory notes where relevant - **Email variant(s)** — main campaign email rewritten for the vertical (pain points, examples, tone) - **Blog or landing page copy** — key content adapted with industry use cases and terminology - **Optional:** Social post variants, objection handlers, or one-pager for sales in that vertical ## Tips - Do one vertical at a time for best quality. For multiple verticals, run this again or use "Create campaign variants for multiple segments." - Share real constraints (e.g. "we can't make medical claims" or "we need to reference SOC 2") so the agent stays within guardrails. ### Starter Prompt We have a campaign promoting [product/value]. Adapt it for the [industry] vertical. Research industry terminology, compliance angles, and pain points, then create a vertical-specific brief, email variant, and blog or landing page copy that keep our core message but speak to [industry] buyers. I'll share our master campaign assets. --- ## Adapt a campaign for a new geography Take an existing campaign and get a version tailored for one region or market — language, locale, local norms, and regulatory context so it resonates when you enter or expand in a new geography. ### Implementation Details ## Before you start - **Campaign to adapt:** Have the campaign (or its core assets: brief, key messages, one main email or blog) that you want to localize. The clearer the "master" version, the better the geography adaptation. - **Target geography:** Choose one region or market (e.g. UK, DACH, APAC, Latin America, France). You'll get one geography-specific version; for multiple regions, run this use case again for each geography. - **Memories populated:** Product overview and positioning so the agent can keep the core message while layering in local nuance. ## How to do it in Quotient Start a conversation with the Quotient agent. Share the campaign and the geography: > "We have a campaign promoting [product/value]. I want to adapt it for [region, e.g. UK / DACH / APAC]. Research the geography — language, locale preferences, local regulations (e.g. GDPR), cultural nuance, and how buyers in that market talk about our category — and create a tailored version: updated brief, email variant, and blog or landing page copy that keeps our core message but speaks to [that region]." The agent researches the geography (language, regulations, local norms, cultural context) and produces adapted deliverables that preserve your positioning while feeling native to the region. ## What you'll get - **Geography brief** — same campaign goals and structure, with region-specific messaging, proof points, and regulatory/locale notes where relevant - **Email variant(s)** — main campaign email rewritten (language, tone, local references, currency/examples where needed) - **Blog or landing page copy** — key content adapted for the geography (language, local use cases, terminology) - **Optional:** Social post variants, objection handlers, or one-pager for sales in that region ## Tips - Do one geography at a time for best quality. For multiple regions, run this use case again for each geography. - Specify language and locale upfront (e.g. "UK English, reference £ and local case studies" or "German for DACH, reference €"). - Share regulatory constraints (e.g. "GDPR for EU," "we can't make certain claims in UK") so the agent stays within guardrails. ### Starter Prompt We have a campaign promoting [product/value]. Adapt it for [geography, e.g. UK / DACH / APAC]. Research language, locale, local regulations, and cultural nuance, then create a geography-specific brief, email variant, and blog or landing page copy that keep our core message but speak to that region. I'll share our master campaign assets. --- ## Create campaign variants for multiple segments Run one campaign across several industries or segments — get 2–4 tailored variants (brief, email, content) that keep your core message but speak to each segment so you can scale without generic messaging. ### Implementation Details ## Before you start - **Master campaign defined:** Have one campaign (brief, key messages, and at least one main asset like an email or blog) that you want to run in multiple segments. - **Segments in mind:** Decide which 2–4 you want — e.g. industries (healthcare, financial services, manufacturing) or personas (SMB vs. enterprise). The agent will produce one variant per segment. For multiple geographies, use "Adapt a campaign for a new geography" instead (one region at a time or run it multiple times). - **Memories populated:** So variants stay aligned with your product and positioning. ## How to do it in Quotient Start a conversation with the Quotient agent. Share the master campaign and the segments: > "We have a campaign for [product/value]. Create variants for [segment A], [segment B], and [segment C] — e.g. healthcare, fintech, and manufacturing. For each, give me an updated brief, an email variant, and short notes on language and angles to use. Keep the core value prop the same; tailor messaging, pain points, and examples to each segment." The agent researches each segment and outputs a set of variants — one brief and one email (or other asset) per segment — so you can run the same campaign in parallel with tailored copy. ## What you'll get - **Per-segment brief** — same campaign structure, segment-specific messaging and proof points - **Per-segment email (and optionally blog/social)** — main assets rewritten for each segment - **Segment notes** — terminology, compliance or positioning tips, and differentiators to stress per segment ## Tips - Start with 2–3 segments; adding more can dilute quality. You can always run this again for more later. - If one segment has strict compliance (e.g. healthcare), say so upfront so the agent can flag or adjust copy. - Use the same subject-line and creative structure where possible so you can compare performance across segments. ### Starter Prompt We have a campaign for [product/value]. Create variants for [segment A], [segment B], and [segment C] — e.g. healthcare, fintech, manufacturing. For each, give me an updated brief and an email variant that keep our core message but use segment-specific language, pain points, and examples. I'll share our master campaign. --- ## Set up founder or executive voice for marketing Capture a founder's or executive's voice and expertise in the Memories so the Quotient agent can write as them — one-time setup that makes every founder-led campaign consistent and authentic. ### Implementation Details ## Before you start - **Person in mind:** Choose the founder or executive whose voice you want to capture (you can add more later). Usually CEO, co-founder, or a key executive with a strong point of view. - **Source material ready:** Gather writing samples (past posts, emails, interviews), a short bio, and their expertise areas. The more samples, the better the agent matches their voice. - **Memories access:** You'll be adding an author/founder profile that the Quotient agent will use. No special setup required beyond normal Quotient access. ## How to do it in Quotient Start a conversation with the Quotient agent. Describe the person and share the materials: > "I want to set up our CEO [Name] for founder-led marketing. Here's their background and expertise: [summary]. I'm uploading [writing samples / interview transcript / bio]. Create a founder profile in the Memories that captures their voice, perspective, and key themes so the Quotient agent can write as them in future campaigns." The Quotient agent creates a structured profile (background, expertise, writing style, recurring themes) and stores it in your Memories. From then on, any campaign or content brief can reference that profile so deliverables sound like the founder, not generic corporate copy. ## What you'll get - **Founder/executive profile** — stored in the Memories with voice, expertise, and perspective - **Consistent voice across tasks** — the Quotient agent can pull from this profile when you run founder-led campaigns - **Optional:** A short "voice guide" or bullet summary you can share with your team so everyone knows how this person should sound ## Tips - Use real samples. Generic "our CEO cares about customers" doesn't help. Past LinkedIn posts, emails, or interview quotes do. - You can set up multiple founders/executives over time. Repeat this use case for each person. - After setup, use "Run a founder-led thought leadership campaign" when you're ready to create a specific campaign in their voice. ### Starter Prompt Set up a founder profile for our CEO [Name]. Their background: [summary]. I'm sharing [writing samples / interview transcript / bio]. Create a profile in the Memories that captures their voice and expertise so the Quotient agent can write as them in blog, social, and email content. --- ## Run a founder-led thought leadership campaign Create a campaign where the founder or executive is the voice — blog posts, LinkedIn and X content, and email that establish thought leadership and feel genuinely personal. ### Implementation Details ## Before you start - **Founder/executive voice set up:** Ideally you've already run "Set up founder or executive voice for marketing" so their profile is in the Memories. If not, you can do a lightweight setup in the same conversation (share a few samples and their expertise). - **Campaign theme or topic:** Have a clear theme (e.g. "responsible AI," "why we built X," "lessons from scaling") and a timeframe (e.g. quarterly campaign, one-off launch). - **Channels in mind:** Decide which you want — blog, LinkedIn, X, email newsletter, or a combination. ## How to do it in Quotient Start a conversation with the Quotient agent. Describe the campaign and who the voice is: > "Create a founder-led thought leadership campaign for our CEO [Name]. Theme: [e.g. responsible AI development]. I want [e.g. one long-form blog post, 3 LinkedIn posts, and an email newsletter section] over the next [timeframe]. Use their profile from the Memories so everything sounds like them — authentic and opinionated, not corporate." The Quotient agent creates a campaign with tasks for each deliverable, pulling from the founder's Memories profile so the content matches their voice and perspective. ## What you'll get - **Blog post(s)** — long-form thought leadership in the founder's voice - **Social content** — LinkedIn and/or X posts that reflect their expertise and tone - **Email content** — newsletter section or broadcast that incorporates their perspective - **Campaign brief** — theme, messaging, and timeline so every deliverable stays aligned ## Tips - Lead with a point of view, not a topic. "Why most AI marketing fails" is stronger than "AI in marketing." - If the voice doesn't sound right, share feedback and 1–2 example phrases: "She'd say X, not Y." The agent can refine. - Run these campaigns on a cadence (e.g. quarterly) so the founder builds a consistent presence. Reuse this use case each time. ### Starter Prompt Create a founder-led thought leadership campaign for our CEO [Name]. Theme: [e.g. responsible AI development]. Include [e.g. one blog post, 3 LinkedIn posts, and an email newsletter section]. Use their profile from the Memories so the content sounds like them. I'll share the campaign timeline. --- ## Drive attendance at a webinar Run a one-off webinar with a full campaign — pre-event promotion, invitation and reminder emails, social buzz, and post-event follow-up for attendees and no-shows so you fill seats and convert registrations into pipeline. ### Implementation Details ## Before you start - **Memories populated:** Brand voice, target audience, and product positioning so event messaging aligns with your strategy. - **Webinar details defined:** Date, topic, speaker(s), target audience, and goals. The more detail, the tighter the campaign. - **Integrations (optional):** Connect Zoom or WebEx so the Quotient agent can sync registration and attendance for segmented follow-up. ## How to do it in Quotient Start a conversation with the Quotient agent. Describe the webinar and the full lifecycle you want: > "Create an event marketing campaign for our webinar on [topic] on [date]. Include a pre-event blog post, an email broadcast inviting our audience, a day-before reminder, post-event follow-up emails for attendees and no-shows, and LinkedIn posts promoting the event. Plan the full timeline from promotion to follow-up." The Quotient agent builds the campaign with tasks for invites, reminders, follow-up, promotion, and webinar setup. After the event, use attendance data to segment follow-up or build a nurture flow. ## What you'll get - Pre-event blog post, invitation email, reminder emails, social promotion - Post-event follow-up (separate for attendees vs. no-shows; recording + next steps) - Optional: blog recap, social clips, or follow-up email series to repurpose the content ## Tips - Start promotion 2–3 weeks out. Connect Zoom/WebEx so follow-up can be segmented by attendance. For a recurring webinar series with the script written by the agent, use "Always-on webinar campaigns (script and series)." ### Starter Prompt Create an event marketing campaign for our upcoming webinar on [topic] on [date]. Include a pre-event blog post, an email broadcast inviting our audience, a day-before reminder, post-event follow-up emails for attendees and no-shows, and LinkedIn posts promoting the event. Plan the full timeline from promotion to follow-up. --- ## Create a campaign for a VIP customer dinner Host an exclusive dinner for high-value customers or prospects — invitation copy, reminder sequences, and post-event follow-up so you strengthen relationships and move deals forward. ### Implementation Details ## Before you start - **Memories populated:** Brand voice and key accounts or segments so invitations and follow-up feel personal. - **Event details defined:** Date, location, format (dinner, dinner + brief presentation), invite list or criteria, and goals (relationship building, pipeline, customer feedback). ## How to do it in Quotient Tell the Quotient agent you're planning a VIP dinner and what you need: > "We're hosting a VIP customer dinner in [city] on [date] for our top 20 accounts. Create an invitation email that feels exclusive and personal, a reminder sequence (2 weeks out, 1 week out, day before), and post-event follow-up — thank-you email and a short survey or ask for a meeting. Also draft a one-sheet we can send with the invite (agenda, venue, dress code)." the Quotient agent produces invitation copy, reminders, and follow-up. For high-touch dinners, ask it to build a post-event nurture sequence so the relationship stays warm over weeks. ## What you'll get - Invitation email (and optional one-sheet or save-the-date) - Reminder sequence - Post-event thank-you and next-step follow-up - Optional: post-event nurture flow for attendees ## Tips - Start outreach 4–6 weeks out; capacity is limited and calendars fill. Segment follow-up by who attended vs. who declined so you can re-invite or nurture accordingly. ### Starter Prompt We're hosting a VIP customer dinner in [city] on [date] for [e.g. our top 20 accounts / key prospects in the region]. Create an exclusive invitation email, a reminder sequence (2 weeks, 1 week, day before), and post-event thank-you and follow-up. Include a short one-sheet with agenda and venue details. --- ## Drive presence at a tradeshow or conference Run the full marketing motion around a tradeshow or conference — pre-event buzz, booth and session promotion, meeting invites, and post-event follow-up so you maximize presence and pipeline. ### Implementation Details ## Before you start - **Memories populated:** Brand voice, product positioning, and target audience so all event messaging is consistent. - **Event details defined:** Show name, dates, location, your presence (booth, session, sponsored event), and goals (leads, meetings, brand awareness). ## How to do it in Quotient Describe the show and the full lifecycle to the Quotient agent: > "We're exhibiting at [tradeshow name] on [dates] in [city]. We have a booth and we're hosting a session on [topic]. Create a campaign: save-the-date and invitation emails to our list and target accounts, social posts promoting our booth and session, a meeting-invite template for scheduling on-site, and post-event follow-up for everyone we met (with different angles for session attendees vs. booth leads). Plan the timeline from 4 weeks out through 2 weeks after." The Quotient agent builds the campaign — invites and follow-up emails, social promotion, and optional one-sheets or leave-behinds. Segment follow-up by lead source (booth, session, meeting) for better conversion. ## What you'll get - Save-the-date and invitation emails - Social promotion (booth number, session time, meeting CTA) - Meeting-invite or scheduling template - Post-event follow-up (segmented by how you met them) ## Tips - Start promotion 4–6 weeks out. Capture lead source in registration or CRM so you can personalize follow-up. Repurpose session content into a blog or recap email after the show. ### Starter Prompt We're exhibiting at [tradeshow/conference name] on [dates]. We have a booth and a session on [topic]. Create a full campaign: save-the-date, invitation emails, social posts for booth and session, meeting-invite template, and post-event follow-up segmented by how we met them. Timeline from 4 weeks out to 2 weeks after. --- ## Create a campaign for a roadshow or multi-city tour Take your message on the road — plan promotion, invitations, and follow-up for a multi-city series of events (demos, dinners, or roundtables) so you reach key markets without running each event from scratch. ### Implementation Details ## Before you start - **Memories populated:** Brand voice, product messaging, and target segments so roadshow messaging is consistent across cities. - **Roadshow defined:** Cities/dates, format (demo day, dinner, roundtable), target audience per city, and goals. ## How to do it in Quotient Tell the Quotient agent about the roadshow: > "We're running a 4-city roadshow in [cities] over [dates] — each stop is a half-day demo and lunch for prospects in that region. Create a master campaign: a save-the-date that lists all cities, city-specific invitation emails for each stop, reminder sequence, and post-event follow-up. Include a one-sheet with the full tour schedule and registration links. After each event, we want a thank-you email and a follow-up sequence for no-shows in that city." the Quotient agent produces the full set of assets. You can reuse the same structure for each city and customize only the city name, date, and venue. Segment follow-up by city and attendance so you can re-engage or nurture by region. ## What you'll get - Save-the-date (full tour) and per-city invitation emails - Reminder sequence (reusable per city) - One-sheet or landing content with tour schedule - Post-event thank-you and follow-up (per city; segment attendees vs. no-shows) ## Tips - Lock cities and dates early; promotion should start 4–6 weeks before the first stop. Reuse templates and only swap city/date/venue to save time. Consider an executive roundtable or VIP dinner in one city for a higher-touch tier. ### Starter Prompt We're running a [number]-city roadshow in [cities] over [dates] — each stop is [e.g. a half-day demo and lunch for prospects]. Create a campaign: save-the-date for the full tour, city-specific invitation emails for each stop, reminder sequence, one-sheet with tour schedule and registration links, and post-event thank-you and follow-up per city (segment attendees vs. no-shows). --- ## Create a campaign for an executive roundtable or advisory event Host an executive roundtable or customer advisory event — intimate format, high-value attendees, and tailored invitations and follow-up so you deepen relationships and gather strategic feedback. ### Implementation Details ## Before you start - **Memories populated:** Brand voice and context on invitees (accounts, roles) so invitations and follow-up feel personal. - **Event defined:** Date, location, format (roundtable, advisory board, executive breakfast), topic or agenda, invite list, and goals (feedback, relationship, pipeline). ## How to do it in Quotient Describe the roundtable or advisory event to the Quotient agent: > "We're hosting an executive roundtable in [city] on [date] for 12–15 CMO-level customers and prospects. Topic: [e.g. the future of AI in marketing]. Create a personalized invitation email that explains the format and why we're inviting them, a reminder sequence, an agenda one-sheet to send with the invite, and post-event follow-up — thank-you, summary of themes discussed, and an ask (e.g. case study, reference, or next meeting)." The agent drafts invitation copy, reminders, agenda or one-sheet, and follow-up. For advisory-style events, a post-event summary document (themes, quotes, next steps) can be a strong follow-up asset. ## What you'll get - Personalized invitation email - Reminder sequence - Agenda or one-sheet - Post-event thank-you and summary (and optional nurture for non-attendees) ## Tips - Keep the list small and exclusive; personalization matters. Send invitations 4–6 weeks out. Follow up with a concise summary of the discussion so attendees feel their time was valued. ### Starter Prompt We're hosting an executive roundtable in [city] on [date] for [number] CMO-level [customers/prospects]. Topic: [topic]. Create a personalized invitation email, reminder sequence, agenda one-sheet, and post-event follow-up (thank-you, summary of themes, and a clear next-step ask). --- ## Drive feature adoption after launch Get existing users to actually use a new feature with targeted emails, in-app messaging copy, and short how-to content that reduces friction and drives activation. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add your product overview and brand voice so the Quotient agent can describe the feature in language that matches how you talk to customers. - **Feature details ready:** Have the feature name, key benefits, where to find it in the product, and any screenshots or short demos. The clearer the "what" and "why," the better the adoption content. - **Audience in mind:** Know who you're trying to activate — all users, a specific segment, or users who've shown related behavior. This shapes tone and channel. ## How to do it in Quotient ### 1. Start a conversation with the Quotient agent Open a new chat and describe the adoption campaign. Include the feature, who you're targeting, and which channels you want. For example: > "We just launched a new reporting export feature. I want to drive adoption among existing customers. Create an email sequence: one announcement email with a clear CTA to try it, plus a follow-up for non-openers. Also draft short in-app tooltip and banner copy we can use in the product, and a brief how-to section we can drop into our help center." ### 2. The agent creates the campaign and deliverables The Quotient agent creates a campaign with tasks for each deliverable — announcement email, follow-up email, in-app copy variants, and any how-to or help content. It focuses on reducing friction (where to click, what they get) and a single clear next step. ### 3. Provide the details Share specifics so the copy stays accurate: - "The feature lives under Settings > Export — mention that in the CTA" - "Lead with time saved: users can export in one click instead of building reports manually" - "We're targeting users who've viewed the Reports page in the last 30 days" - "Tone should be helpful, not salesy — they already have the feature" ### 4. Review and ship Review the emails and in-app copy, then schedule or hand off to your email and product teams. For ongoing adoption, you can run a follow-up campaign or use an AI Job to remind you to check activation metrics and iterate. ## What you'll get A typical feature adoption campaign includes: - **Announcement email** — short, benefit-led email with one clear CTA to try the feature - **Follow-up email** — for non-openers or non-activators, with a different angle or reminder - **In-app copy** — tooltip, banner, or empty-state copy that highlights the feature where users will see it - **How-to or help content** — a brief guide or FAQ section that reduces "how do I…?" friction ## Tips for better results - **One CTA per email.** Don't ask users to "learn more, try it, and share feedback." Ask them to do one thing — usually "try it" with a direct link. - **Lead with the outcome.** "Export any report in one click" beats "We've added a new export feature." Frame everything in terms of what the user gains. - **Segment when you can.** Adoption messaging for power users can be different from messaging for casual users. Tell the agent who you're targeting. - **Time it after launch.** Let the initial launch buzz settle, then hit users who haven't adopted yet with a focused adoption campaign. - **Measure and iterate.** Share open and click rates (or activation data) with the agent and ask for a refreshed follow-up sequence if the first wave underperforms. ### Starter Prompt We just launched [feature name]. I want to drive adoption among [audience]. Create an announcement email with a clear CTA to try the feature, a follow-up email for non-openers, and short in-app copy (tooltip or banner) we can use in the product. Include a brief how-to we can add to our help center. I'll share the feature details and where it lives in the product. --- ## Announce an integration or partnership Launch a new integration or partnership with a coordinated announcement, use-case content, and sales or partner enablement so the news lands with customers and internal teams. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add your product overview and positioning so the Quotient agent can tie the integration or partnership to your core message. - **Details ready:** Have the partner or integration name, what it does, who it's for, and any key benefits or use cases. Links to partner pages or docs help. - **Channels in mind:** Decide whether you need blog, email, social, sales one-pager, partner-facing assets, or all of the above. ## How to do it in Quotient ### 1. Start a conversation with the Quotient agent Open a new chat and describe the integration or partnership launch. Include what you're announcing, who the audience is, and what deliverables you need. For example: > "We're launching an integration with [Partner]. Can you create a launch campaign for this? I need a blog post announcing it and explaining the main use cases, an email to existing customers, social posts for LinkedIn and X, and a one-pager for our sales team so they can talk about it in deals. Also a short partner-facing summary we can share with [Partner]'s team." ### 2. The agent creates the campaign and deliverables The Quotient agent creates a campaign with a brief and tasks for each deliverable. The brief captures the integration/partnership value, key use cases, and messaging so every piece stays aligned. It can draft audience-specific variants — technical depth for developers, business value for decision-makers, and talking points for sales. ### 3. Provide the details Share specifics so the content is accurate and on-brand: - "The integration lets users [X]. The main benefit is [Y]." - "We're targeting [segment] — emphasize time savings and fewer context switches" - "Partner's positioning is [Z] — our messaging should complement that" - "Sales needs to know: how to turn it on, who it's for, and how to handle 'we use a competitor' objections" ### 4. Review and publish Review the blog, emails, social posts, and sales/partner assets. Coordinate with your partner on timing if you're doing a joint announcement. Publish the blog first, then email and social, and distribute the one-pager to sales and partner teams. ## What you'll get A typical integration or partnership launch includes: - **Blog post** — announcement plus use cases, benefits, and a clear CTA (e.g. try it, read the docs) - **Email** — to customers or prospects announcing the integration/partnership and why it matters - **Social posts** — LinkedIn and X (and optionally Instagram) from company and optionally personal accounts - **Sales one-pager or battle card** — what it is, who it's for, how to position it, and how to turn it on - **Partner-facing summary** — short overview and key messages for the partner's marketing or sales team ## Tips for better results - **Lead with the job-to-be-done.** "Connect your CRM to Quotient in one click" is stronger than "We've partnered with Salesforce." Frame the announcement around what the user can do now. - **Give sales something they can use.** A one-pager with 3 bullets, a link, and 2 objection handlers is more useful than a long blog. Ask the agent to keep the sales asset scannable. - **Align with the partner.** If you're doing a co-launch, share your draft with the partner so messaging is consistent and you don't overpromise on their side. - **Use case over feature.** Focus content on "here's how you use Quotient + [Partner] to get X done" rather than a feature list. That drives adoption and shares better. - **Plan a follow-up.** Ask the agent for a short follow-up email or social post you can use 2–4 weeks later to re-surface the integration for people who didn't act the first time. ### Starter Prompt We're launching an integration with [Partner]. Can you create a launch campaign for this? I need a blog post announcing it and explaining the main use cases, an email to existing customers, social posts for LinkedIn and X, and a one-pager for our sales team so they can talk about it in deals. Also a short partner-facing summary we can share with [Partner]'s team. --- ## Create a One-Pager for the Sales Team Turn your product knowledge and competitive positioning into a polished, ready-to-share one-pager your sales team can use in meetings — in minutes, not days. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add your product overview, competitive positioning, and key value propositions to the Quotient agent's Memories. The more context the agent has, the sharper the one-pager. - **Author profiles created:** If the one-pager should reflect a specific team member's perspective or department, having author profiles helps the agent tailor the tone. - **Target audience defined:** Know who the sales team will be handing this to — prospects in a specific vertical, deal stage, or company size. ## How to do it in Quotient ### 1. Start a conversation with the Quotient agent Open a new chat and describe what you need. Be specific about the audience, product focus, and how the sales team will use it. For example: > "Create a one-pager for our sales team to use with mid-market CFOs evaluating our platform. Focus on ROI, time savings, and our competitive advantage over [Competitor]." ### 2. The agent creates a Document The Quotient agent drafts the one-pager as a Document deliverable, pulling from your Memories for accurate product details, competitive positioning, and messaging. The document typically includes sections like a headline value prop, key benefits, proof points, and a clear CTA. ### 3. Review and iterate Read through the draft and ask for changes directly in the chat. You can request adjustments like: - "Make the competitive section more aggressive — call out their pricing directly" - "Add a customer quote from [Company] about implementation speed" - "Shorten this to fit on one page when printed" - "Rewrite the headline to lead with the cost-saving angle" ### 4. Share with your sales team Once finalized, export or copy the content into your preferred format (PDF, Google Doc, Notion page) and distribute to your sales team. You can also link the Document to a campaign if it's part of a larger launch. ## What you'll get A typical one-pager document includes: - **Headline value proposition** — one sentence that captures why the prospect should care - **3-4 key benefits** — specific, measurable outcomes tied to the prospect's pain points - **Competitive differentiators** — clear reasons to choose you over alternatives - **Proof points** — customer quotes, stats, or case study references - **Call to action** — next step for the prospect (demo, trial, meeting) ## Tips for better results - **Be specific about the audience.** "Enterprise CIOs in financial services" produces dramatically better output than "potential customers." The agent tailors language, proof points, and pain points to match. - **Reference your Memories.** If you've built competitive battle cards or customer personas, mention them — the agent will pull from those docs automatically. - **Give the agent a real example.** Upload a one-pager you like (from your company or a competitor) and ask the agent to match the structure and tone. - **Iterate in layers.** Get the structure right first, then refine messaging, then polish language. Trying to do everything in one prompt leads to generic output. - **Create variants.** Once you have a solid base, ask the agent to create versions for different verticals, personas, or deal stages. This is where the real time savings kick in. ### Starter Prompt Create a one-pager for our sales team to use with mid-market CFOs evaluating our platform. Focus on ROI, time savings, and our competitive advantage. Keep it scannable — they'll hand this out in meetings. --- ## Schedule weekly SEO blog posts with AI Jobs Put your content calendar on autopilot by scheduling the Quotient agent to research trending topics and publish SEO-optimized posts every week — without you lifting a finger. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add your brand voice, product overview, and target audience so the Quotient agent writes content that sounds like your team, not a generic AI. - **Author profiles created:** Set up author profiles for the people whose bylines will appear on posts. The agent uses these to match tone and style. - **Publishing integration connected:** Connect Webflow, WordPress, or your preferred CMS so posts can go live automatically after review. ## How to do it in Quotient ### 1. Navigate to AI Jobs Go to the Jobs page under the AI Jobs section in the sidebar, or simply ask Quotient in chat to create a recurring job for you. ### 2. Write your prompt Write the instructions you want the Quotient agent to follow each time the job runs. Be specific about topic area, word count, audience, and SEO targets. For example: > "Create a blog post targeting B2B marketing decision makers. Research trending topics in AI marketing automation from the past week. Write a 1,200-1,500 word post that positions us as a thought leader. Include 2-3 relevant statistics from reputable sources, use our brand voice from the Memories, and optimize for SEO with target keywords related to marketing automation and AI." ### 3. Set your schedule Choose when the job runs — every Monday at 9am, every Wednesday, twice a week, whatever cadence fits your content strategy. The agent will execute the prompt automatically at the scheduled time. ### 4. Review and publish Each time the job runs, the Quotient agent creates a new blog post in draft status. You'll get a notification to review it. Make any edits, then publish — or let it go live automatically if you trust the output. ## What you'll get Each scheduled run produces: - **A complete blog post** — researched, written, and SEO-optimized based on your prompt - **Trending topic coverage** — content that's timely and relevant based on what's happening in your industry right now - **Consistent publishing cadence** — no more gaps in your content calendar because someone got busy - **SEO metadata** — keywords, meta description, and title tag optimized for search ## Tips for better results - **Be specific in your prompt.** "Write a blog post" produces generic results. "Write a 1,200-word post targeting VP of Marketing at B2B SaaS companies about AI-powered email personalization" produces content you can actually use. - **Include content guardrails.** Specify what to avoid — competitor mentions, certain topics, promotional language — so the agent stays on-brand every time. - **Start with weekly review.** Run the job weekly and review every post for the first month. Once you're confident in the output quality, you can reduce your review time or increase frequency. - **Rotate topic areas.** Create multiple jobs targeting different topic clusters — one for product-focused content, one for industry trends, one for how-to guides — to build a diverse content library. - **Combine with social amplification.** Pair this job with a social media ghostwriting job so each new blog post automatically gets promoted across your social channels. ### Starter Prompt Create a recurring AI Job for the Quotient agent: every Monday at 9am, research trending topics in [your industry] from the past week and write a 1,200-1,500 word SEO-optimized blog post targeting [your audience]. Use our brand voice from the Memories and include 2-3 statistics from reputable sources. --- ## Automate competitive intelligence monitoring with AI Jobs Never miss a competitor move again — schedule the Quotient agent to automatically research your competitors every week, compile strategic analysis, and add it to your Memories so your whole team stays informed. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add your competitive positioning and key differentiators so the agent can frame competitor updates in the context of your strengths and weaknesses. - **Competitors identified:** Know which companies you want to track — their names, websites, and the specific areas you care about (pricing changes, new features, market expansion, messaging shifts). - **Competitive intelligence folder created:** Set up a dedicated folder in your Memories where the agent can save weekly reports for easy reference. ## How to do it in Quotient ### 1. Navigate to AI Jobs Go to the Jobs page under the AI Jobs section in the sidebar, or ask Quotient in chat to create a recurring job for you. ### 2. Write your prompt Write the instructions you want the Quotient agent to follow each time the job runs. Be specific about which competitors, what to look for, and how to report findings. For example: > "Research what HubSpot, Marketo, and Salesforce Marketing Cloud announced or published this week. Visit their blogs, press releases, and product update pages. Summarize the 3-5 most significant announcements, note any new AI features they've launched, analyze how their messaging compares to our positioning, and identify any gaps in their offerings that we can exploit. Create a summary document and add it to the Memories. If any announcement is significant enough to warrant a response from us, flag it and explain why." ### 3. Set your schedule Weekly is the most common cadence for competitive monitoring — enough to stay current without creating noise. Set it for Monday mornings so you start each week with a fresh competitive landscape view. ### 4. Review and act Each week, review the agent's findings in the Memories. Use the insights to update battle cards, brief the sales team, adjust messaging, or create reactive content when a competitor makes a significant move. ## What you'll get Each scheduled run produces: - **Competitor activity summary** — the most important announcements, launches, and updates from each tracked competitor - **AI feature tracking** — specific analysis of competitors' AI capabilities and how they compare to yours - **Messaging analysis** — how competitor positioning is evolving and where you have clear advantages - **Opportunity flags** — gaps or weaknesses you can exploit in your own marketing and sales efforts - **Memories update** — findings automatically saved and accessible to the Quotient agent for future content creation ## Tips for better results - **Be specific about what to track.** "Monitor competitors" is too vague. "Track product launches, pricing changes, and AI feature announcements from HubSpot and Marketo" gives the agent clear targets. - **Include customer sentiment.** Add instructions to check review sites, Reddit, and social media for customer reactions — competitor announcements matter less than how their customers respond. - **Layer multiple jobs.** Run a weekly quick scan and a monthly deep dive. The weekly job catches breaking news; the monthly job provides strategic analysis and trend identification. - **Connect to action.** Include instructions for the agent to flag items that need a response — a competitor's new feature you should counter-position against, or a pricing change you can exploit in sales conversations. - **Share with the team.** Route the weekly report to your sales and product teams so everyone benefits from the intelligence, not just marketing. ### Starter Prompt Create a recurring AI Job for the Quotient agent: every Monday morning, research what [Competitor A], [Competitor B], and [Competitor C] announced or published this week. Summarize the 3-5 most significant updates, note any new AI features, analyze how their messaging compares to our positioning, and add a summary document to our Memories. Flag any announcement that warrants a response from us. --- ## Automate executive social media ghostwriting with AI Jobs Keep your CEO's LinkedIn and X presence active and authentic on autopilot — schedule the Quotient agent to draft posts in their voice on a recurring cadence so thought leadership never stalls. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add the executive's writing voice, past posts, and communication style. The Quotient agent needs this context to write posts that sound genuinely like them, not a corporate template. - **Author profiles created:** Set up author profiles for the executives whose accounts you'll be posting to. Include their areas of expertise, tone preferences, and topics they care about. - **Social accounts connected:** Connect the executive's LinkedIn and X accounts in Quotient so posts can be published directly. ## How to do it in Quotient ### 1. Navigate to AI Jobs Go to the Jobs page under the AI Jobs section in the sidebar, or ask Quotient in chat to create a recurring job for you. ### 2. Write your prompt Write the instructions you want the Quotient agent to follow each time the job runs. Be specific about voice, topics, and format. For example: > "Create a LinkedIn post for our CEO's personal account. Review the latest updates from our product changelog, company milestones, or industry trends in AI and marketing technology. Write in their authentic voice (reference their author profile and past posts in the Memories). The post should be 150-200 words, include a personal anecdote or insight where appropriate, and focus on providing value to their network rather than overtly promoting our product. Include 2-3 relevant hashtags." ### 3. Set your schedule Most executives benefit from 2-3 posts per week to maintain visibility. Set jobs for Tuesday and Thursday mornings, or whatever cadence matches the executive's desired presence level. ### 4. Review and publish Each time the job runs, the Quotient agent creates a draft post. The executive (or their marketing team) can review, tweak, and approve before publishing. Over time, as the agent learns the voice, review time drops significantly. ## What you'll get Each scheduled run produces: - **A ready-to-publish post** — written in the executive's authentic voice based on their profile and past content - **Timely, relevant content** — the Quotient agent researches current events and trends to keep posts fresh and topical - **Consistent executive presence** — no more going dark for weeks because the CEO got busy with other priorities - **Thought leadership positioning** — each post reinforces the executive's expertise and the company's market position ## Tips for better results - **Feed the agent real voice samples.** Upload 5-10 of the executive's best past posts to the Memories. The more authentic material the agent has, the better it matches their voice. - **Vary the content mix.** Create separate jobs for different post types — industry commentary, personal lessons, product insights, team culture — so the feed feels natural and diverse. - **Keep the executive in the loop.** The best ghostwriting happens when the executive reviews and occasionally edits posts, adding personal touches that keep the voice authentic over time. - **Create jobs for multiple platforms.** LinkedIn and X require different styles. Set up separate jobs for each platform so content is optimized for the audience and format. - **Track what resonates.** After a month, review which posts got the most engagement and ask the agent to lean into those themes and formats. ### Starter Prompt Create a recurring AI Job for the Quotient agent: every Tuesday and Thursday morning, draft a LinkedIn post for our CEO's personal account. Use their author profile and past posts from the Memories to match their voice. Focus on industry trends in [your space], company milestones, or product updates. 150-200 words, value-focused, 2-3 hashtags. Create a draft for review before publishing. --- ## Automate campaign performance reports with AI Jobs Get monthly performance insights delivered automatically — schedule the Quotient agent to review all active campaigns, analyze results, and compile data-driven recommendations so you always know what's working. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Active campaigns running:** Have at least a few campaigns with email broadcasts, blog posts, or social posts that have been live long enough to generate performance data. - **Goals defined:** Set measurable goals in your campaign briefs (e.g., target open rates, click-through rates, lead targets) so the agent has benchmarks to evaluate against. - **Memories populated:** Add your brand context and past campaign learnings so the agent can provide recommendations grounded in your specific business, not generic advice. ## How to do it in Quotient ### 1. Navigate to AI Jobs Go to the Jobs page under the AI Jobs section in the sidebar, or ask Quotient in chat to create a recurring job for you. ### 2. Write your prompt Write the instructions you want the Quotient agent to follow each time the job runs. Be specific about what metrics to analyze and how to format the report. For example: > "Review the performance of all active campaigns from the past 30 days. For each campaign, analyze email open rates, click-through rates, blog engagement, social media reach, and any conversions or leads generated. Identify which campaigns exceeded their goals and which fell short. Create a detailed summary document that includes: (1) Top 3 best-performing campaigns with analysis of what made them successful, (2) Campaigns that underperformed with specific recommendations for improvement, (3) Overall trends and insights across all campaigns, (4) Actionable recommendations for next month's campaign strategy." ### 3. Set your schedule Monthly is the most common cadence for performance reviews — enough data to identify meaningful patterns without creating reporting fatigue. Set it for the first Monday of each month so you start fresh with a clear picture of last month's results. ### 4. Review and strategize Each month, review the agent's report and use the insights to adjust your strategy. Double down on what's working, fix what isn't, and let data — not gut feeling — drive your next month's campaign planning. ## What you'll get Each scheduled run produces: - **Campaign scorecards** — performance summary for each active campaign against its stated goals - **Top performer analysis** — what made your best campaigns successful, with patterns you can replicate - **Underperformance diagnosis** — specific reasons campaigns fell short with actionable fix recommendations - **Cross-campaign trends** — patterns across all campaigns that reveal broader strategic insights - **Next month recommendations** — data-driven suggestions for campaign strategy, messaging, and channel mix ## Tips for better results - **Set clear goals in your briefs.** The agent can only evaluate performance against benchmarks you define. Include specific targets (e.g., "25% open rate," "100 leads") in every campaign brief. - **Layer reporting cadences.** Run a monthly strategic review alongside weekly quick-check reports. The weekly report catches issues early; the monthly report identifies strategic patterns. - **Include comparative analysis.** Ask the agent to compare this month's performance to previous months so you can track improvement over time, not just absolute numbers. - **Connect insights to action.** The most valuable part of any report is the "so what." Ask the agent to prioritize recommendations by potential impact so you know where to focus. - **Share with stakeholders.** Route the monthly report to your leadership team and cross-functional partners so marketing performance is visible across the organization. ### Starter Prompt Create a recurring AI Job for the Quotient agent: on the first Monday of each month, review the performance of all active campaigns from the past 30 days. Analyze email open rates, click-through rates, blog engagement, social reach, and conversions. Create a summary document with top 3 performers, underperformers with improvement recommendations, overall trends, and actionable recommendations for next month's strategy. --- ## Run a weekly changelog campaign Keep your users informed about product improvements with a recurring multi-channel campaign — blog post, email broadcast, and social posts that showcase momentum and keep your audience engaged. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add your product overview and brand voice so the agent can describe features in language that's consistent with your positioning. - **Email template created:** Set up a reusable changelog email template so each week's broadcast starts from a consistent design. The Quotient agent can help you build one. - **Social accounts connected:** Connect your LinkedIn and X accounts so social announcements can be published directly from Quotient. ## How to do it in Quotient ### 1. Start a conversation with the Quotient agent Open a new chat and describe the changelog campaign. Share the features and updates you want to highlight. For example: > "Create a changelog campaign for our weekly product updates. The campaign should include a blog post summarizing new features and improvements, an email broadcast to all active users, social media posts on LinkedIn and X highlighting the key updates, and follow-up tasks to coordinate in-app notifications." ### 2. The agent creates the campaign and deliverables The Quotient agent creates a campaign with tasks for each channel — blog post, email broadcast, and social posts (typically company + personal accounts on both LinkedIn and X). It writes a brief that captures the key updates and messaging angle for the week. ### 3. Provide the details Share the specifics of what changed this week: - "Here are the 3 main features we shipped — [describe each one]" - "Include screenshots of the new dashboard — I'll upload them" - "We also fixed a few bugs — list those in a separate section" - "The marquee feature is the new analytics view — lead with that" ### 4. Review and publish Review the blog post and email, then approve for publishing. The social posts should go out after the blog is live so there's a link to share. **For automation,** create an AI Job that runs weekly and creates a **campaign** (brief with this week's updates — you can provide the feature list in the job prompt or when it runs) and adds **tasks** for the blog post, email broadcast, and social posts. Review the campaign and kick off the tasks each week. ## What you'll get A typical changelog campaign includes: - **Blog post** — concise, scannable summary of features and improvements with screenshots - **Email broadcast** — mirrors the blog content, sent to active users and subscribers - **Company social posts** — LinkedIn and X posts from the company account highlighting key updates - **Personal social posts** — LinkedIn and X posts from founders sharing their perspective on the updates - **Bug fixes section** — transparent list of resolved issues when applicable ## Tips for better results - **Be concise.** Changelogs should be scannable, not essays. Lead with the 2-3 most important updates and keep descriptions to 1-2 sentences each. - **Lead with user value.** "You can now export reports in one click" is better than "We added an export button." Frame every update in terms of what it means for the user. - **Include visuals.** Screenshots and short recordings make changelogs dramatically more engaging. Provide these to the Quotient agent when possible. - **Make it a habit.** Consistency builds trust. Whether it's weekly or bi-weekly, stick to a regular cadence so users know when to expect updates. - **Use personal voices for social.** Founder posts about product updates consistently outperform company posts. Include personal perspectives on why each feature matters. ### Starter Prompt Create a changelog campaign for our weekly product updates. Include a blog post summarizing new features and improvements, an email broadcast to all active users, and social posts on LinkedIn and X highlighting the key updates. I'll share the specific features we shipped this week. --- ## Run an ABM campaign targeting key accounts Build hyper-personalized campaigns for your most valuable target accounts — with custom content, tailored messaging, and executive outreach that speaks directly to each account's specific challenges and priorities. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add your product overview, competitive positioning, and value propositions. For ABM, the agent also needs industry-specific pain points and solution mappings. - **Target accounts identified:** Know which companies you're going after, who the key stakeholders are (names, titles, decision authority), and what specific challenges they face. The Quotient agent can help you look up account details from your CRM. - **Personalization level defined:** Decide whether this is one-to-one (single named account), one-to-few (small cluster of similar accounts), or one-to-many (scaled ABM for a larger group). ## How to do it in Quotient ### 1. Start a conversation with the Quotient agent Open a new chat and describe the ABM campaign you want to build. Include target accounts, personas, and what channels to use. For example: > "Create an ABM campaign targeting CFOs at mid-market financial services companies. The campaign should include personalized blog content addressing their specific pain points, custom landing pages for each target account, a series of account-specific email broadcasts, and a multi-touch executive outreach sequence with personalized messaging." ### 2. The agent researches and builds the campaign The Quotient agent researches target accounts using web search, pulls relevant data from your CRM, and creates a campaign with deeply personalized tasks. For one-to-one campaigns, each deliverable is tailored to the specific company. For one-to-few, the agent identifies common patterns across targets. ### 3. Review and sharpen personalization Check the campaign and refine the account-specific details: - "The messaging for Acme Corp should reference their recent acquisition — that changes their priorities" - "Add a custom one-pager for each account that maps our solution to their specific tech stack" - "Include a personal LinkedIn message from our CEO to their CTO" - "Create a dinner invitation for the top 5 accounts in the Chicago area" ### 4. Execute the multi-touch sequence ABM campaigns typically unfold over weeks with multiple touchpoints. The Quotient agent coordinates the sequence — outreach documents first, followed by personalized emails, then event invitations — ensuring each touch builds on the last without overwhelming the target. ## What you'll get A typical ABM campaign includes: - **Account research brief** — company overview, key stakeholders, pain points, and opportunity assessment - **Personalized outreach documents** — LinkedIn messages, direct emails, and connection request scripts tailored to each stakeholder - **Account-specific content** — one-pagers, case studies, or blog posts addressing their industry's challenges - **Email sequences** — multi-touch email campaigns with account-specific messaging - **Event invitations** — exclusive dinners, demos, or webinars for high-value targets ## Tips for better results - **Start with research.** The more you know about the target account, the better the personalization. Ask the Quotient agent to research the company before creating any content. - **Use the Quotient agent.** If the target accounts are already in your CRM, the agent can pull firmographic data, past interactions, and engagement history to inform the campaign. - **Personalize beyond the company name.** Real ABM personalization means referencing specific challenges, recent news, or industry regulations — not just swapping in a company name. Provide this context to the agent. - **Coordinate with sales.** ABM works best when marketing and sales are aligned. Share the campaign plan with your sales team and incorporate their insights about each account. - **Track at the account level.** Success in ABM is measured by account engagement, not individual metrics. Focus on whether target stakeholders are opening emails, visiting your site, and accepting meetings. ### Starter Prompt Create an ABM campaign targeting CFOs at mid-market financial services companies. Include personalized blog content for their pain points, account-specific email broadcasts, and a multi-touch executive outreach sequence. I'll share the target account list and key stakeholders — research each account and tailor the messaging accordingly. --- ## Run a thought leadership campaign Establish your brand as an industry authority with a coordinated content series — multi-part blogs, newsletters, social amplification, and downloadable resources working together to build credibility and attract inbound leads. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add your brand voice, industry expertise, competitive positioning, and author profiles. Thought leadership content must sound authentically like your team, not generic AI. - **Topic and angle defined:** Know what territory you want to own. The best thought leadership campaigns center on a specific thesis — not just "AI in marketing" but "why AI-native platforms will replace legacy marketing software." - **Author profiles created:** Thought leadership is personal. Create author profiles for the executives or subject-matter experts whose names will appear on the content. ## How to do it in Quotient ### 1. Start a conversation with the Quotient agent Open a new chat and describe the thought leadership campaign you want to build. For example: > "Create a thought leadership campaign about the future of AI in marketing. The campaign should include a 4-part blog series exploring different aspects, a weekly email newsletter highlighting key insights from each post, LinkedIn posts sharing the main takeaways, and a comprehensive whitepaper document that synthesizes all the content." ### 2. The agent creates a campaign with a content arc The Quotient agent plans the full content arc — how the blog series progresses, which insights get pulled into newsletters, what angles work best for social, and how the whitepaper ties everything together. Each task is sequenced so content builds on itself over weeks. ### 3. Review and refine the narrative Check the overall arc and adjust: - "The blog series should start contrarian and end constructive — problem → problem → vision → solution" - "Add personal LinkedIn posts from our CEO alongside the company posts" - "Include a newsletter that curates external articles on this topic alongside our own content" - "The whitepaper should include original data or a framework, not just a summary of the blogs" ### 4. Execute over time Unlike a launch campaign that happens all at once, thought leadership campaigns unfold over weeks. The Quotient agent sequences the work so each blog, email, and social post goes out at the right time, building momentum as the series progresses. ## What you'll get A typical thought leadership campaign includes: - **Multi-part blog series** — 3-5 interconnected posts that explore different facets of a central thesis - **Email newsletter** — weekly sends highlighting key insights and driving readers to the full posts - **Social amplification** — LinkedIn and X posts from both company and personal accounts sharing takeaways - **Anchor resource** — a comprehensive document (whitepaper, guide, or framework) that synthesizes the series - **Strategic brief** — the central thesis, messaging pillars, and content arc that keeps everything cohesive ## Tips for better results - **Start with a thesis, not a topic.** "The future of AI in marketing" is a topic. "Legacy marketing software is dead and AI is the replacement" is a thesis. Theses create content that has a point of view. - **Use personal voices.** Thought leadership from "the company" falls flat. Attach real names and personal perspectives to every piece. Founders and executives carry the most weight. - **Build, don't repeat.** Each blog should advance the argument, not restate it. Ask the Quotient agent to plan a progression where later posts reference and build on earlier ones. - **Create a lead magnet.** The whitepaper or comprehensive guide serves as a gated asset that captures leads from people who found value in the free blog content. - **Repurpose aggressively.** One blog post becomes 3-5 social posts, a newsletter section, and a whitepaper chapter. Ask the Quotient agent to extract maximum value from every piece of content. ### Starter Prompt Create a thought leadership campaign about the future of AI in marketing. Include a 4-part blog series exploring different aspects, a weekly email newsletter with key insights from each post, LinkedIn posts sharing the main takeaways, and a comprehensive whitepaper that synthesizes the series. Plan the content arc so each piece builds on the last. --- ## Plan a product launch campaign Coordinate a multi-channel launch for a new product or feature — with blogs, emails, social posts, and events working together under one strategic umbrella so nothing falls through the cracks. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add your product overview, key value propositions, and competitive positioning. The Quotient agent uses this to write a strategic brief that grounds every deliverable in your actual messaging. - **Target audience defined:** Know who this launch is for — existing customers, prospects, a specific vertical, or all of the above. This shapes which channels and messaging matter most. - **Launch details ready:** Have the feature name, key benefits, launch date, and any supporting materials (screenshots, specs, demo recordings) on hand. ## How to do it in Quotient ### 1. Start a conversation with the Quotient agent Open a new chat and describe the launch. Include what you're launching, who it's for, and what channels you want to use. For example: > "Create a product launch campaign for our new AI-powered analytics feature. The campaign should include a blog post explaining the feature, an email broadcast to existing customers, social media posts announcing the launch on LinkedIn and X, and a webinar event demonstrating how it works." ### 2. The agent creates a campaign with tasks The Quotient agent creates a campaign with a strategic brief and a set of tasks — one for each deliverable. The brief captures the launch objectives, target audience, core messaging, and timeline so every agent working on the campaign stays aligned. ### 3. Review and refine the plan Look over the campaign and ask for changes before execution begins: - "Add a second email — a follow-up for people who didn't open the first one" - "Include a LinkedIn post from our CEO's personal account, not just the company page" - "Move the webinar to the week after launch — we need the blog out first" - "Sharpen the brief — the messaging should lead with the time-savings angle" ### 4. Kick off execution Once you approve the plan, the Quotient agent kicks off execution — writing the blog post, creating the email broadcast, drafting social posts, and planning the webinar. You stay in control as tasks move through review. ## What you'll get A typical product launch campaign includes: - **Strategic brief** — objectives, audience, messaging, and timeline that aligns all deliverables - **Blog post** — feature announcement with benefits, use cases, and screenshots - **Email broadcast** — targeted announcement to customers or prospects - **Social posts** — platform-specific announcements for LinkedIn, X, and Instagram - **Webinar or demo event** — live walkthrough showing the feature in action ## Tips for better results - **Sequence your deliverables.** Blogs should publish before social posts go out so there's something to link to. Emails often perform best when they land the same day as the announcement. - **Provide screenshots and demos.** the Quotient agent can write compelling copy, but real product visuals make the content dramatically more effective. Share screenshots or recordings in the chat. - **Think about post-launch.** The best launches don't stop on day one. Ask the Quotient agent to include follow-up emails, a customer success story a few weeks later, or social posts highlighting early adoption. - **Use personal accounts.** Posts from founders or executives consistently outperform company accounts. Include personal social posts alongside company announcements. - **Include the "why."** Tell the Quotient agent why you built this feature — what customer pain point it solves. This context makes every deliverable more compelling than a generic feature announcement. ### Starter Prompt Create a product launch campaign for our new AI-powered analytics feature. Include a blog post explaining the feature, an email broadcast to existing customers, social posts on LinkedIn and X announcing the launch, and a webinar demonstrating how it works. I'll share the feature details and screenshots. --- ## Deliver sales enablement for product Arm sales with product-focused one-pagers, demo scripts, objection handling, and competitive talking points so they can confidently pitch features and handle questions in the room. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add your product overview, key value props, and competitive positioning so the Quotient agent can align enablement with how you actually sell. - **Feature or product in scope:** Have the feature name, key benefits, who it's for, and how it fits into the broader product. Screenshots or a short demo flow help. - **Audience for sales:** Know who sales is selling to (e.g. CMO vs. developer, SMB vs. enterprise) so the one-pager and script match the conversation. ## How to do it in Quotient ### 1. Start a conversation with the Quotient agent Open a new chat and describe the sales enablement you need. Include the product or feature, the buyer persona, and which assets you want. For example: > "We're rolling out our new analytics feature to the sales team. I need a one-pager they can leave with prospects, a short demo script that hits the 3 main benefits in 5 minutes, and 3–4 objection handlers for 'we already use X' and 'we don't have budget for this.' Include a quick competitive comparison so they know how we stack up." ### 2. The agent creates the deliverables The Quotient agent creates a campaign with tasks for each asset — one-pager, demo script, objection handlers, and optionally a battle card or competitive cheat sheet. It pulls from your Memories so messaging and positioning stay consistent with the rest of your go-to-market content. ### 3. Provide the details Share specifics so the enablement is accurate and usable: - "The demo should start with [key workflow] — that's what resonates most" - "Our main competitor here is [X] — sales hears 'we're evaluating them' a lot. Give them a clear differentiator." - "One-pager should be one side only, scannable. They use it in live meetings." - "Include a link to the help doc and a short 'how to get a trial' CTA for the one-pager" ### 4. Review and distribute Review the one-pager, script, and objection handlers. Share with product or sales leadership for a quick sign-off, then add to your enablement hub or sales playbook. Schedule a short training or office hours so reps know where to find the assets and how to use them. ## What you'll get A typical product sales enablement set includes: - **One-pager** — one side, benefit-led summary with key points, differentiator, and a clear next step (demo, trial, doc) - **Demo script** — short narrative and talking points for a 5–10 minute demo, with suggested flow and key messages - **Objection handlers** — 3–5 common objections (competitor, budget, timing, "we're good") with concise responses and proof points - **Competitive talking points or battle card** — how you compare on the features that matter for this product, and how to position when the prospect is evaluating others ## Tips for better results - **Keep the one-pager to one page.** Sales won't use two-pagers in meetings. Ask the agent to prioritize the 3–5 points that close deals. - **Script = talking points, not a script.** Reps don't read word-for-word. Ask for bullets and transitions, not a paragraph script. - **Use real objections.** Share the top 3–5 objections your sales team actually hears. Generic ones are less useful. - **Update when the product changes.** When you ship a related feature or change positioning, come back and ask the agent to refresh the one-pager and script. - **Tie to the deal.** If you have a specific segment (e.g. enterprise vs. mid-market), ask for slightly different one-pagers or script variants so sales can match the room. ### Starter Prompt Create sales enablement for our [feature/product]. I need a one-pager for prospects, a short demo script (5–10 min) with the main benefits, and objection handlers for [top 2–3 objections]. Include competitive talking points so sales knows how we compare. Our audience is [persona]. I'll share the feature details and differentiators. --- ## Track industry trends and emerging topics Stay ahead of market shifts by monitoring what's trending in your industry — so you can create timely content, adjust positioning, and capitalize on emerging opportunities before competitors do. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add your industry context, competitive landscape, and target audience so the agent can filter trend research through the lens of what's relevant to your business. - **Focus areas defined:** Know which industry verticals, technology categories, or market segments you want to track. "AI in marketing" is better than just "marketing." - **Content strategy in mind:** Understanding whether you want to write blog posts, create social content, or adjust product messaging based on trends helps the agent tailor its recommendations. ## How to do it in Quotient ### 1. Start a conversation with the Quotient agent Open a new chat and describe the trend research you need. Be specific about your industry and what you're looking for. For example: > "Research the latest trends in AI-powered marketing software. I want to know what topics are trending on social media, what analysts are writing about, and what our competitors are talking about. Focus on the last 30 days and highlight anything we should be creating content around." ### 2. The agent researches and reports The agent searches industry publications, social media discussions, analyst reports, and competitor blogs to identify emerging themes and trending topics. It maps these trends to your business context and content strategy to surface the most actionable opportunities. ### 3. Review and prioritize Go through the findings and ask for deeper analysis: - "Which of these trends is most relevant to our target buyer?" - "Are any of our competitors already creating content around this topic?" - "Draft 5 blog post titles we could write to capitalize on this trend" - "How does this trend affect our competitive positioning?" ### 4. Turn trends into content Use the trend research to inform your content calendar, create timely blog posts or social content, update your messaging, or plan campaigns around emerging topics. You can hand insights directly to the Quotient agent to start creating content immediately. ## What you'll get A typical trend research report includes: - **Trending topics** — what's generating buzz in your industry right now - **Analyst perspectives** — what industry experts and thought leaders are saying - **Competitor activity** — which trends your competitors are already leveraging - **Content opportunities** — specific topics you should be writing about - **Strategic implications** — how these trends affect your positioning and go-to-market ## Tips for better results - **Be specific about your niche.** "Marketing technology trends" is too broad. "AI agent adoption in B2B marketing teams" gives the agent a focused area to research. - **Set a timeframe.** "Last 30 days" or "this quarter" helps the agent focus on what's current rather than rehashing old trends. - **Ask for content angles.** Don't just learn what's trending — ask the agent to suggest specific content you could create to ride the wave. - **Connect trends to your product.** Ask the agent to explain how each trend relates to your product's capabilities. This helps you create content that's both timely and strategically relevant. - **Automate with AI Jobs.** Set up a recurring weekly or monthly trend report using AI Jobs so you always have fresh insights without remembering to ask. ### Starter Prompt Research the latest trends in AI-powered marketing software over the last 30 days. I want to know what's trending on social media, what analysts are writing about, and what our competitors are talking about. Highlight the top 5 content opportunities we should create content around. --- ## Analyze your positioning to find unique advantages Understand how your brand stacks up against competitors and identify the specific differentiators that make your pitch compelling — so your messaging hits harder and your team sells with confidence. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add your product overview, value propositions, and any existing competitive intelligence. the Quotient agent builds on what you already know. - **Competitor landscape defined:** Know which competitors you're most often compared against. Have their websites and any product details you've gathered. - **Target audience clear:** Understanding who you sell to helps the agent identify which advantages matter most to your buyers. ## How to do it in Quotient ### 1. Start a conversation with the Quotient agent Open a new chat and describe the positioning analysis you need. For example: > "Analyze our positioning versus HubSpot and Marketo. I want to understand where we genuinely win, where we're at parity, and where we're weaker. Focus on AI capabilities, ease of use, pricing, and time to value. Be honest — I need this to be useful, not flattering." ### 2. The agent researches and analyzes The Quotient agent reviews competitor websites, product pages, pricing, and customer reviews, then maps your capabilities against theirs. It identifies genuine differentiators, areas of parity, and honest weaknesses — framed through the lens of what your target buyers care about. ### 3. Review and refine Dig into the analysis and ask for more depth: - "Which of our advantages are hardest for competitors to copy?" - "How should we frame our weaknesses when prospects bring them up?" - "Draft positioning statements for each of our top 3 differentiators" - "What messaging would resonate most with a VP of Marketing evaluating us?" ### 4. Put it to work Use the positioning analysis to sharpen your website copy, update sales decks, refine pitch narratives, or brief your marketing team. Save key insights to the Memories so the Quotient agent creates on-message content going forward. ## What you'll get A typical positioning analysis includes: - **Competitive landscape overview** — how each competitor positions themselves and where they focus - **Advantage map** — your genuine differentiators ranked by defensibility and buyer importance - **Parity areas** — capabilities where you and competitors are roughly equivalent - **Vulnerability assessment** — honest gaps and how to address or reframe them - **Recommended positioning** — messaging frameworks that lean into your strongest advantages ## Tips for better results - **Ask for honesty.** The most useful positioning analyses acknowledge weaknesses. Knowing where you're vulnerable is just as important as knowing where you're strong. - **Focus on buyer perspective.** Features only matter if buyers care about them. Ask the agent to rank advantages by how much they influence purchase decisions, not just by technical superiority. - **Test positioning with real prospects.** Use the messaging frameworks in sales conversations and report back on what resonates. Refine based on real-world feedback. - **Revisit after market changes.** When a competitor launches a new feature or changes pricing, re-run the analysis. Positioning is a moving target. - **Save to Memories.** Once you've validated your positioning, save it as a memory. This ensures every agent — blog, email, social — creates content that reinforces your strategic messaging. ### Starter Prompt Analyze our positioning versus [Competitor A] and [Competitor B]. I want to understand where we genuinely win, where we're at parity, and where we're weaker. Focus on [key dimensions like AI capabilities, ease of use, pricing]. Be honest — I need actionable insights, not flattering spin. Recommend positioning statements for our top differentiators. --- ## Build competitive battle cards for your sales team Create detailed, side-by-side competitor comparisons your sales team can reference during calls — with feature breakdowns, pricing intel, objection handling, and win/loss positioning. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add your product overview, pricing details, and key differentiators. The more detail you provide, the sharper the competitive comparisons. - **Competitor information available:** Have competitor names, websites, and any known details about their products, pricing, or weaknesses. The agent will supplement with web research. - **Sales team input (optional):** If your sales reps have shared common objections or competitive scenarios they encounter, include those for more practical battle cards. ## How to do it in Quotient ### 1. Start a conversation with the Quotient agent Open a new chat and describe the battle card you need. Specify the competitor and what areas to cover. For example: > "Create a competitive battle card comparing us to HubSpot. Cover features, pricing, AI capabilities, ease of use, and integration ecosystem. Include common objections our sales team hears and recommended responses. Format it so sales reps can scan it in 2 minutes before a call." ### 2. The agent researches and drafts The agent researches the competitor's current product, pricing, and positioning, then creates a structured Document with side-by-side comparisons. It references your Memories for accurate product details and frames comparisons to highlight your advantages. ### 3. Review and sharpen Read through the battle card and ask for refinements: - "Add a section on their recent pricing changes — customers are confused about their new model" - "Include specific trap questions our reps can ask during demos" - "Make the objection handling more conversational — less scripted" - "Add a quick-reference table at the top comparing the 5 most important features" ### 4. Distribute to your team Share the battle card with your sales team via your internal tools. Keep it as a living Document in Quotient and update it regularly as competitors evolve. You can also ask the agent to save key insights to the Memories so the Quotient agent always has access to the competitive context. ## What you'll get A typical battle card includes: - **Quick-reference comparison table** — side-by-side feature/capability comparison for fast scanning - **Pricing analysis** — how their pricing model compares to yours, including hidden costs - **Strengths and weaknesses** — honest assessment of where they're strong and where you win - **Objection handling** — responses to the most common competitive objections - **Trap questions** — questions your reps can ask that expose competitor weaknesses ## Tips for better results - **Be honest about weaknesses.** Battle cards that only highlight your strengths aren't useful. Ask the agent to include areas where the competitor is genuinely strong so reps aren't caught off guard. - **Include real customer quotes.** If you have quotes from customers who switched from the competitor, include them. Nothing is more persuasive than a peer's experience. - **Update regularly.** Competitors evolve. Set a reminder to refresh battle cards quarterly, or ask the agent to research updates whenever a competitor makes a major announcement. - **Test with your sales team.** After distributing, ask reps which sections they use most and which objections they still struggle with. Use that feedback to refine. - **Create one per competitor.** A battle card that tries to compare you against 5 competitors at once is too diluted. Create focused, detailed cards for each major competitor. ### Starter Prompt Create a competitive battle card comparing us to HubSpot. Cover features, pricing, AI capabilities, ease of use, and integrations. Include common objections our sales team hears and recommended responses. Format it so reps can scan it in 2 minutes before a call. Add a quick-reference comparison table at the top. --- ## Research a competitor's latest announcement and how to respond A competitor just announced something — a new feature, pricing change, or product launch. Get the full picture, how it compares to you, and a clear response plan so you can act fast instead of guessing. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add your competitive positioning and key differentiators so the agent can frame the announcement in the context of your strengths. - **The announcement in mind:** You've seen a headline, press release, or heard the news — you want to understand it and react, not run a broad competitive scan. ## How to do it in Quotient ### 1. Start a conversation with the Quotient agent Open a new chat and point the agent at the specific announcement. Paste a link, quote the headline, or describe what you heard. For example: > "HubSpot just announced their new AI content assistant. I saw the blog post but need the full picture. What are they actually launching, how does it compare to what we offer, what are customers saying about it, and what should we do in response — messaging, sales talking points, or content?" ### 2. The agent researches that announcement The Quotient agent finds the official details, related coverage, and customer reaction. It focuses on this one development rather than a general competitor roundup. ### 3. Get implications and response options Ask for what you need to act: - "Summarize this in 3 bullets for our sales team." - "Where do we still win vs. this? Give me counter-positioning points." - "Should we respond publicly? If yes, what angle?" - "Save this analysis to our Memories so we can reference it in future content." ### 4. Act on it Use the briefing to update battle cards, draft a response, brief sales, or decide to stay quiet. For ongoing monitoring of many announcements, use the "Automate competitive intelligence monitoring with AI Jobs" use case instead. ## What you'll get A focused reaction brief for that single announcement: - **What they actually announced** — features, pricing, positioning, and any fine print - **How it compares to you** — where you're ahead, where you're not, and how to talk about it - **Customer and market reaction** — what users and press are saying (review sites, social, articles) - **Recommended response** — whether and how to respond in messaging, sales, or content ## Tips for better results - **Lead with the announcement.** Give a link or the exact headline so the agent targets that event, not a generic "what's new" search. - **Ask for a response plan.** "What should we do?" gets more actionable output than "tell me about it." - **Request a shareable summary.** Ask for a 5-minute brief you can send to sales or leadership. - **Save to Memories.** Have the agent create or update a competitive intel doc so the Quotient agent and your team can reuse the analysis. ### Starter Prompt HubSpot just announced [their new AI content assistant / their pricing change / etc.]. I saw the announcement but need the full picture. Research what they're actually launching, how it compares to our offering, what customers are saying about it, and what we should do in response — messaging, sales talking points, or whether we should respond publicly at all. --- ## Analyze top-ranking content to find competitive gaps Study what's already ranking for your target keywords and identify exactly where your content can be better — so you create posts that outperform the competition instead of guessing. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Target keywords identified:** Know which search terms you want to compete for. The agent will analyze what's currently ranking for those terms. - **Memories populated:** Your product overview and competitive positioning help the agent identify where your unique perspective can differentiate your content from what's already out there. - **Competitor URLs (optional):** If you know which competitors' blogs you want to benchmark against, have those URLs ready. ## How to do it in Quotient ### 1. Start a conversation with the Quotient agent Open a new chat and describe the competitive content analysis you need. For example: > "Analyze the top 3 articles ranking for 'marketing automation for startups.' I want to know what they cover, what they miss, and where we can create something better. Look at structure, depth, examples, and unique angles." ### 2. The agent researches and analyzes The Quotient agent searches for your target keywords, visits the top-ranking pages, and performs a detailed content analysis. It evaluates structure, depth, topics covered, gaps, and opportunities where your content can stand out. ### 3. Review and dig deeper Go through the analysis and ask for more detail: - "What topics do all three articles cover that we absolutely need to include?" - "Where are the biggest gaps — what are they all missing?" - "How long are these articles? Do we need to go deeper?" - "Draft an outline for a post that would beat all three" ### 4. Turn analysis into content Use the competitive analysis to brief a new blog post or improve an existing one. Hand the insights directly to the Quotient agent with instructions to create content that fills the gaps you've identified. ## What you'll get A typical competitive content analysis includes: - **Content overview** — summary of what each top-ranking article covers and how it's structured - **Common themes** — topics that all top results address (table stakes you need to cover) - **Content gaps** — important topics or angles that none of the current results cover well - **Differentiation opportunities** — where your unique perspective or product can add value competitors can't - **Recommended outline** — a suggested structure for content that could outrank the current results ## Tips for better results - **Be specific about what you're competing for.** "AI marketing" is too broad. "AI marketing automation for B2B startups" gives the agent a focused target to analyze. - **Look beyond the top 3.** Ask the agent to check results on page 2 as well — sometimes there are strong articles that aren't ranking well due to domain authority, not content quality. - **Focus on gaps, not imitation.** The goal isn't to copy what's ranking. It's to identify what's missing and fill those gaps with your unique expertise. - **Consider intent.** Not all top-ranking content serves the same search intent. Ask the agent to categorize results by intent (informational, comparison, how-to) so you target the right type. - **Use this before writing.** Running a competitive analysis before creating content saves significant rewriting later. Build the insights into your content plan from the start. ### Starter Prompt Analyze the top 3 articles ranking for 'marketing automation for startups.' I want to know what they cover, what they miss, and where we can create something better. Look at structure, depth, examples, and unique angles. Draft an outline for a post that would beat all three. --- ## Rewrite content based on keyword targets Transform existing content to rank for specific keywords — updating language, structure, and focus without losing the original value or voice of the piece. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Existing content identified:** Have a blog post, landing page, or other content that needs keyword-focused rewriting. Share the URL or paste the content directly. - **Target keywords selected:** Know which specific keywords or phrases you want the content to rank for. If you need help choosing, start with the Keyword Analysis use case. - **Memories populated:** Your product positioning and brand voice help the agent rewrite content that stays on-brand while targeting new keywords. ## How to do it in Quotient ### 1. Start a conversation with the Quotient agent Open a new chat and share the content you want rewritten along with the target keywords. For example: > "Rewrite this blog post to target the keyword 'AI email marketing platform.' The current post is about email automation generally — I want to shift the focus to AI-powered email specifically. Keep the same structure but update the language, examples, and headings to match the new keyword target." ### 2. The agent rewrites the content The Quotient agent analyzes the existing content, identifies where keyword integration makes sense, and rewrites sections to naturally incorporate target terms. It preserves the original's value while shifting focus toward your keyword goals. ### 3. Review and refine Compare the rewrite to the original and ask for adjustments: - "The intro feels forced — make the keyword integration more natural" - "Keep the original example in section 2 — it was stronger" - "Add more instances of the secondary keyword in the second half" - "The headings are good but the meta description needs work" ### 4. Publish and monitor Replace the existing content with the optimized version or publish as a new post. Track ranking changes over the following weeks to see how the rewrite performs against your target keywords. ## What you'll get A typical keyword-focused rewrite includes: - **Updated headings** — H2s and H3s restructured to include target keywords naturally - **Rewritten intro and conclusion** — opening and closing paragraphs optimized for the new keyword focus - **Updated examples and language** — body content adjusted to align with the target topic - **New meta description** — search-optimized summary with target keyword included - **Internal linking suggestions** — opportunities to link to other relevant content on your site ## Tips for better results - **Don't force it.** If the keyword doesn't fit the content naturally, it might be better to write a new post than to awkwardly shoehorn it in. Ask the agent whether a rewrite or new post makes more sense. - **Preserve what works.** If the original has sections that perform well (high engagement, good flow), tell the agent to keep those intact and focus changes elsewhere. - **Target related keywords.** Ask the agent to include semantically related terms — not just the exact keyword — to signal topical authority to search engines. - **Check before publishing.** Read the rewrite side-by-side with the original to make sure nothing important was lost in the process. - **Track the results.** Monitor ranking changes for 4-6 weeks after publishing. If rankings improve, apply the same approach to other underperforming posts. ### Starter Prompt Rewrite this blog post to target the keyword 'AI email marketing platform.' The current post is about email automation generally — I want to shift the focus to AI-powered email specifically. Keep the same structure but update the language, examples, and headings to match the new keyword target. Include a new meta description. --- ## Optimize blog posts for better SEO performance Take existing blog content and improve its search ranking potential — with actionable recommendations for structure, keywords, meta tags, and readability that drive organic traffic. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Published blog content:** Have a blog post URL or draft ready for the agent to analyze. The more content you have, the more specific the recommendations. - **Target keywords identified:** Know which keywords you want the post to rank for. If you don't, ask the Quotient agent to do keyword research first (see the Keyword Analysis use case). - **Memories populated:** Your product overview and competitive positioning help the agent suggest keyword opportunities that align with your business goals. ## How to do it in Quotient ### 1. Start a conversation with the Quotient agent Open a new chat and share the blog post you want to optimize. You can paste a URL, mention the blog by name, or share specific sections. For example: > "Analyze this blog post and suggest SEO improvements. I want it to rank for 'AI marketing platform' and 'marketing automation for startups.' Check the heading structure, keyword density, meta description, and internal linking." ### 2. The agent analyzes and recommends The Quotient agent evaluates your content against SEO best practices — heading hierarchy, keyword placement, content depth, meta description quality, and competitive gaps. It provides specific, actionable recommendations rather than generic advice. ### 3. Review and implement Go through the recommendations and ask the agent to make changes: - "Rewrite the H2 headings to include the target keyword naturally" - "Add a FAQ section at the end targeting these long-tail queries" - "Write a better meta description — the current one is too vague" - "Expand the section on implementation — it's thinner than competing articles" ### 4. Track and iterate After publishing the optimized version, monitor rankings and traffic over the next few weeks. Come back to the Quotient agent with performance data to make further refinements based on what's working. ## What you'll get A typical SEO optimization review includes: - **Heading structure analysis** — whether your H1/H2/H3 hierarchy follows best practices and includes target keywords - **Keyword placement review** — where target keywords appear (or should appear) in the content - **Content depth assessment** — how your post compares to top-ranking content for the same terms - **Meta description rewrite** — an optimized meta description that improves click-through rates - **Specific rewrite suggestions** — exact changes to make in headings, intro, and key sections ## Tips for better results - **Share your target keywords upfront.** The agent can optimize for specific terms much more effectively than trying to guess what you want to rank for. - **Don't over-optimize.** If the agent's suggestions make the content read awkwardly, push back. Search engines reward content written for humans, not keyword-stuffed articles. - **Compare against competitors.** Ask the agent to visit the top 3 results for your target keyword and identify what they cover that you don't. - **Optimize in batches.** Pick your 5-10 highest-potential posts and optimize them together. The agent can maintain consistency across your keyword strategy. - **Update regularly.** SEO isn't set-and-forget. Revisit top posts every 3-6 months to refresh content, add new sections, and update statistics. ### Starter Prompt Analyze this blog post and suggest SEO improvements. I want it to rank for 'AI marketing platform' and 'marketing automation for startups.' Check the heading structure, keyword density, meta description, and internal linking. Give me specific rewrite suggestions for the headings and meta description. --- ## Conduct keyword analysis to find ranking opportunities Discover which keywords your content should target to drive organic traffic — with research that connects search data to your actual business goals and competitive landscape. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add your product overview, target audience, and competitive positioning. The agent uses this context to recommend keywords that actually align with your business — not just high-volume vanity terms. - **Content goals defined:** Know whether you're optimizing for brand awareness (top-of-funnel), lead generation (mid-funnel), or conversion (bottom-of-funnel). This shapes which keywords matter most. - **Current content inventory (optional):** If you already have published blogs, sharing URLs helps the agent identify gaps and opportunities relative to what you've already covered. ## How to do it in Quotient ### 1. Start a conversation with the Quotient agent Open a new chat and describe the keyword research you need. Be specific about your topic area, target audience, and goals. For example: > "Research keyword opportunities for our blog around 'AI marketing automation.' I want to find terms we can realistically rank for — not just the highest volume keywords. Focus on mid-funnel terms where people are evaluating solutions." ### 2. The agent researches and reports The Quotient agent searches the web to analyze the competitive landscape for your target terms. It identifies keyword clusters, assesses ranking difficulty, and maps opportunities to your content strategy based on your Memories context. ### 3. Review and refine Go through the research and ask for deeper analysis: - "Dig deeper into the 'marketing automation for startups' cluster — what are the long-tail opportunities?" - "Which of these keywords do our top competitors already rank for?" - "Suggest blog post titles for the top 5 keyword opportunities" - "Show me what content is currently ranking #1 for these terms" ### 4. Turn insights into content Use the keyword research to brief blog posts, optimize existing content, or plan an editorial calendar. You can hand the research directly to the Quotient agent to start writing optimized content immediately. ## What you'll get A typical keyword analysis includes: - **Keyword clusters** — groups of related terms organized by topic and intent - **Competitive landscape** — who's ranking for these terms and how strong their content is - **Opportunity assessment** — which keywords you can realistically rank for given your domain authority - **Content recommendations** — suggested blog topics and formats to target each keyword - **Search intent mapping** — whether each keyword signals awareness, consideration, or decision-stage intent ## Tips for better results - **Start with your product, not keywords.** Describe what you sell and who you sell to. Let the agent find the keywords — that produces better results than starting with terms you think are important. - **Think in clusters, not individual keywords.** A single blog post can rank for dozens of related terms. Ask the agent to group keywords into clusters that each map to one content piece. - **Balance volume and difficulty.** High-volume keywords are tempting but often impossible to rank for. Ask the agent to prioritize winnable terms with decent traffic. - **Include competitor URLs.** Share your top competitors' blog URLs so the agent can analyze what they rank for and find gaps you can exploit. - **Revisit quarterly.** Search landscapes shift. Come back every quarter to refresh your keyword strategy based on what's changed in your industry and what content is performing. ### Starter Prompt Research keyword opportunities for our blog around 'AI marketing automation.' I want to find terms we can realistically rank for — not just the highest volume keywords. Focus on mid-funnel terms where people are evaluating solutions. Group results into clusters and suggest blog post topics for the top opportunities. --- ## Create post threads that tell a compelling story Turn complex ideas, lessons learned, or product narratives into multi-part social threads that build engagement and establish thought leadership — one post at a time. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add your brand voice, industry expertise, and key talking points. Threads require a strong, consistent voice across multiple posts. - **Social accounts connected:** Connect your X and LinkedIn accounts for direct publishing. - **Topic and angle ready:** Have a clear idea of the story you want to tell, the lesson you want to teach, or the argument you want to make. Threads work best when they have a clear narrative arc. ## How to do it in Quotient ### 1. Start a conversation with the Quotient agent Open a new chat and describe the thread you want to create. Share the topic, your angle, and how many posts you're aiming for. For example: > "Create a 7-tweet thread about why most companies are doing AI marketing wrong. Start with a provocative hook, walk through the 3 biggest mistakes, and end with what AI-native actually looks like. Write it from my personal account — conversational and opinionated." ### 2. The agent drafts the full thread The Quotient agent creates a complete thread with a narrative arc — opening hook, supporting points, and a strong close. Each post stands on its own while building toward the thread's overall argument. It draws from your Memories for accurate positioning and authentic voice. ### 3. Review and iterate Read through the full thread and refine: - "The hook needs to be sharper — make it more controversial" - "Post 4 is too long — split it into two tweets" - "Add a specific example or data point to post 3" - "End with a question instead of a CTA — I want engagement, not clicks" ### 4. Publish and engage Post the thread directly from Quotient. Monitor replies and come back to the agent to draft follow-up responses that keep the conversation going. ## What you'll get A typical thread includes: - **Opening hook** — a first post that stops scrollers and makes them want to read more - **Supporting posts** — 3-7 posts that build the argument with examples, data, or story beats - **Transitions** — each post flows naturally into the next while standing on its own - **Strong close** — a final post that drives home the main point with a clear takeaway or call to engage ## Tips for better results - **Start with the hook.** The first post determines whether anyone reads the rest. Ask the agent to write 3-5 hook options so you can pick the strongest one. - **One idea per post.** Each tweet or post should make exactly one point. If a post tries to do too much, ask the agent to split it. - **Use frameworks.** "3 mistakes," "5 lessons," "Before/After" — numbered frameworks give threads structure that readers can follow easily. - **End with engagement.** The final post should invite responses — a question, a bold claim, or a "what would you add?" Ask the agent to optimize for replies. - **Repurpose across platforms.** A great X thread can become a LinkedIn carousel post or a short blog. Ask the agent to create adapted versions for multiple platforms. ### Starter Prompt Create a 7-tweet thread about why most companies are doing AI marketing wrong. Start with a provocative hook, walk through the 3 biggest mistakes, and end with what AI-native actually looks like. Write it from my personal account — conversational and opinionated. End with a question to drive engagement. --- ## Share articles and add your unique perspective Turn interesting articles, reports, and news into social content that positions you as a thoughtful industry voice — without staring at a blank post for 20 minutes. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add your brand voice, industry positioning, and key perspectives so the agent knows your angle on industry topics. - **Social accounts connected:** Connect your LinkedIn and X accounts so you can publish directly from Quotient. - **Article or content ready:** Have the URL of the article, report, or piece of content you want to share and comment on. ## How to do it in Quotient ### 1. Start a conversation with the Quotient agent Open a new chat and share the article URL along with the angle you want to take. For example: > "I want to share this article about AI in marketing on LinkedIn from my personal account. Add my take — specifically that most companies are bolting AI onto legacy tools instead of building AI-native platforms. Keep it under 200 words and make it feel like a genuine reaction, not a corporate post." ### 2. The agent reads the article and drafts your post The Quotient agent visits the article, understands the key arguments, and crafts a post that shares the content while adding your unique perspective. It pulls from your Memories to ensure your take is consistent with your brand positioning. ### 3. Review and iterate Read the draft and ask for adjustments: - "Make it more opinionated — I want to push back on the article's conclusion" - "Add a personal anecdote about when we faced this exact problem" - "Shorten it — the best LinkedIn posts are punchy, not essays" - "Create versions for both LinkedIn and X from the same article" ### 4. Publish across platforms Post directly from Quotient to LinkedIn, X, or both. The agent can adapt the same take for different platforms — longer and more professional for LinkedIn, punchier for X. ## What you'll get A typical article-share post includes: - **Hook** — an opening line that makes people stop scrolling - **Your take** — a genuine perspective that adds something the article doesn't cover - **Key insight** — one or two specific points from the article worth highlighting - **Engagement prompt** — a question or statement that invites comments - **Article link** — properly formatted for the platform ## Tips for better results - **Always add a take.** Sharing an article without your perspective is just content curation. The value is in what you think about it, not just that you read it. - **Disagree respectfully.** Posts that push back on popular opinions get significantly more engagement than posts that simply agree. Ask the agent to find a contrarian angle. - **Connect to your experience.** The most engaging posts tie the article's topic back to something you've personally experienced or built. Mention this to the agent. - **Adapt per platform.** LinkedIn rewards longer, more structured posts. X rewards concise, sharp takes. Ask the agent to create platform-specific versions. - **Build a rhythm.** Sharing 2-3 articles per week with thoughtful commentary builds your reputation as someone worth following. Consistency matters more than virality. ### Starter Prompt I want to share this article about AI in marketing on LinkedIn from my personal account. Add my take — specifically that most companies are bolting AI onto legacy tools instead of building AI-native platforms. Keep it under 200 words and make it feel like a genuine reaction, not a corporate post. [Paste or share the article URL] --- ## Comment on tweets to join industry conversations Stay visible in your industry by crafting thoughtful replies to trending tweets and posts — building your brand's presence in conversations that matter without spending hours scrolling. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Memories populated:** Add your brand voice, key talking points, and industry positioning so the agent writes replies that sound like you, not a generic bot. - **Social accounts connected:** Connect your X (Twitter) accounts in Quotient so you can publish directly from the platform. - **Target conversations in mind:** Know which industry leaders, competitors, or topics you want to engage with. Having a tweet URL or topic ready speeds things up. ## How to do it in Quotient ### 1. Start a conversation with the Quotient agent Open a new chat and share the tweet or topic you want to engage with. You can paste a URL or describe the conversation. For example: > "I want to reply to this tweet from @marketingexpert about the death of email marketing. Offer a contrarian take — email isn't dead, it's just being done wrong. Keep it under 280 characters and make it insightful, not argumentative." ### 2. The agent drafts your reply The Quotient agent crafts a reply that's on-brand, adds genuine value to the conversation, and fits the platform's character limits. It draws from your Memories to ensure your perspective is consistent with your brand positioning. ### 3. Review and iterate Read the draft and ask for adjustments: - "Make it more provocative — I want people to engage with this" - "Add a data point to back up the claim" - "Soften the tone — I don't want to come across as combative" - "Write 3 versions so I can pick the best one" ### 4. Post and engage Publish the reply directly from Quotient or copy it to post manually. Monitor the conversation for follow-up opportunities — you can come back to the agent to draft responses to replies on your comment. ## What you'll get A typical tweet reply includes: - **On-brand perspective** — a reply that reflects your company's unique point of view - **Platform-appropriate tone** — casual enough for Twitter, sharp enough to stand out - **Engagement hooks** — questions or provocative statements that invite further conversation - **Multiple variations** — different angles to choose from based on the vibe you want ## Tips for better results - **Share the original tweet.** Paste the URL so the agent can read the full context and thread before crafting a reply. - **Specify the tone.** "Supportive and additive" reads very differently from "contrarian and bold." Tell the agent what energy you want. - **Add value, don't just agree.** The best replies add a new insight, data point, or perspective. Ask the agent to bring something new to the conversation. - **Be consistent.** Use this regularly to build a presence. One great reply a week is more valuable than a flurry followed by silence. - **Follow up.** If your reply gets engagement, come back to the agent to draft follow-up responses that keep the conversation going. ### Starter Prompt I want to reply to this tweet from @marketingexpert about the death of email marketing. Offer a contrarian take — email isn't dead, it's just being done wrong. Keep it under 280 characters and make it insightful, not argumentative. [Paste the tweet URL] --- ## Build a content moat with an SEO and competitor audit Replicate a dominant player's content tactic: have the agent scan their blog, take an inventory of what they've written and where they rank, then get a strategy and plan to write your own versions so you can capture traffic and match or take some of that authority. ### Implementation Details ## Before you start This use case works best when you've already set up some foundational elements in Quotient: - **Competitor in mind:** Know which competitor has done content/SEO really well in your space (e.g. they show up for almost any question in the category). The agent will audit their blog and strategy. - **Memories populated:** Your product, positioning, and target audience help the agent recommend which of their topics to replicate and how to differentiate your versions. - **Goal clear:** Whether you want to match their authority, take traffic from them, or own a subset of topics — stating the goal helps the agent tailor the plan. ## How to do it in Quotient ### 1. Start a conversation with the Quotient agent Open a new chat and ask whether the tactic is worth replicating and how. Describe the competitor's strength (e.g. they rank for nearly every question in the space) and ask for an audit and strategy. For example: > "[Competitor X] has done really well with content marketing and SEO — ask almost any question about [your category] and they show up with a blog post. How good is this tactic? Should we replicate it? Can you scan their blog and take an inventory of what they've written, then give me a strategy to write our own versions so we can take some of that authority or at least match it?" ### 2. The agent audits and analyzes The Quotient agent researches the competitor's content footprint: what they've written, what they rank for, and how they've built authority. It assesses whether replicating the tactic makes sense for you and identifies which topics or angles to prioritize for your own content. ### 3. Review the strategy and plan You'll get an audit summary and a strategic plan. Ask for more detail or adjustments: - "Which 5 topics should we tackle first and why?" - "What's the biggest content gap we can exploit?" - "Draft outlines for the top 3 posts we should create" - "How does this tie to our product messaging?" ### 4. Execute the plan Use the strategy to brief blog posts, schedule content with AI Jobs, or hand the plan to your team. The audit and roadmap become your playbook for building a content moat. ## What you'll get A typical content moat strategy includes: - **Competitor audit** — what they rank for, content themes, strengths and weaknesses - **Gap analysis** — topics and keywords where they're weak or absent - **Opportunity areas** — where you can create content and capture traffic - **SEO strategy** — target keywords and content angles aligned with your goals - **Prioritized plan** — a roadmap (e.g. 3–6 months) of content to create to build authority ## Tips for better results - **Be specific about the competitor or niche.** Naming the competitor (or "the top 3 players in X") helps the agent focus the audit. - **Tie the moat to your business.** Reference your product or positioning so the plan supports your go-to-market, not just generic SEO. - **Ask for prioritization.** "What should we do first?" gets you an actionable sequence instead of a long list. - **Iterate.** Use the audit once to set the strategy, then come back to update the plan as you publish and rankings change. ### Starter Prompt [Competitor X] has done really well with content marketing and SEO — ask almost any question about [marketing / CRM / your category] and they show up with a blog post. How good is this tactic? Should we replicate it? Can you scan their blog and take an inventory of what they've written, then give me a strategy to write our own versions so we can take some of that authority or at least match it? --- # Pricing Quotient offers four tiers. Paid plans use metered billing — each plan includes a base allocation of usage per month, and additional usage is charged at the overage rates listed below. Resource limits (users, social accounts) are hard caps enforced by the application; exceeding them requires an upgrade. | Free | Starter | Pro | Scale ----------------------------+------------+------------+------------+------------ Price | Free | $49/mo | $400/mo | $800/mo ----------------------------+------------+------------+------------+------------ AI Credits (included) | 500 | 2,000 | 10,000 | 30,000 Emails Sent (included) | 0 | 1,000 | 25,000 | 200,000 Blog Posts (included) | 0 | 30 | 250 | 1,500 Social Posts (included) | 0 | 30 | 250 | 1,500 ----------------------------+------------+------------+------------+------------ Users | 1 | 15 | 30 | Unlimited Social Accounts | 0 | 10 | 25 | Unlimited ----------------------------+------------+------------+------------+------------ Slack Integration | ✗ | ✓ | ✓ | ✓ CRM Integrations | ✗ | ✗ | ✓ | ✓ Custom Email Domains | ✗ | ✗ | ✓ | ✓ Premium AI Models | ✗ | ✓ | ✓ | ✓ Overage pricing (applies to all paid plans): AI Credits: $26.00 per 1,000 credits Emails Sent: $1.50 per 1,000 emails Social Posts: $0.10 per post Blog Posts: $0.10 per post