Tracking Overview

As with any analytics tool, the data is only as good as what you put into it. Setting up Woopra properly from day one will lay the foundation for clean, organized and consistent analysis. Woopra is designed as a complete customer journey analytics tool that you can leverage to not only track a user's journey on your website, but also across multiple devices and platforms.

So how do we track in Woopra? Woopra employs the use of the Javascript Tracking API as a primary way to get data into Woopra from your website or product. The API code is loaded in the browser as the result of running the Javascript Snippet. This implementation is generally done by developers using any number of tools including the Javascript Tracker, for events on your website, server side SDKs for backend events, and HTTP Tracking API which accepts events from any source with access to http. The last way you will get data into your Woopra instance is by installing Apps in our integrations hub, which will allow you to bring in events and data from other services such as CRMs and email marketing tools.

It's important to understand the difference between the Snippet and the Tracker. The Snippet is a short simple function that should never need to be changed or be updated that loads the Tracker code itself from the Woopra servers. The Tracker Object itself is the javascript code that sends events into Woopra.

There are many ways to begin tracking in Woopra. The most common way is the client-side API. If you would like to get started with our technical documentation, please see our technical getting started page: https://docs.woopra.com/reference#intro-javscript-sdk

When you are using one of the tracking SDKs or APIs, there are some main concepts that you need to grasp and tasks to do to get going:

  • Installing your tracking code
  • Configuring your tracker
  • Tracking events and event properties
  • Tracking visitor properties

These tasks are completed differently depending on the SDK or API you are going to use to track your data.


<script id="ssr-props" data-initial-props="{"baseUrl":"/","apiBaseUrl":"/","search":{"appId":"T28YKFATPY","searchApiKey":"YjY5NzhiYjc5ODg3NDFlZmE2NWRlYTVkN2MyODk0M2I3N2Y1N2U4NTlhNDljYmE3Mjg1NTM0MDAyNDkzNGI2Y3RhZ0ZpbHRlcnM9KHByb2plY3Q6NThiNzIxYTFmMjJiODMwZjAwOWEwYmNkKSwodmVyc2lvbjpub25lLHZlcnNpb246NWIwNzBjZTQwNjBiZWUwMDAzNWQ4ZDEyKSwoaGlkZGVuOm5vbmUsaGlkZGVuOmZhbHNlKSwoaW5kZXg6Q3VzdG9tUGFnZSxpbmRleDpQYWdlKQ==","indexName":"readme_search_v2","projectsMeta":[{"modules":{"discuss":false,"reference":true,"examples":true,"docs":true,"landing":true,"suggested_edits":true,"changelog":false,"logs":false,"custompages":false,"tutorials":false,"graphql":false},"id":"58b721a1f22b830f009a0bcd","name":"Woopra Documentation","subdomain":"woopra","nav_names":{"discuss":"","docs":"Setup and Product Manual","reference":"API and SDK Reference","changelog":"","tutorials":""}}],"UrlManager":{"options":{"parent":null,"hasOneChild":null,"project":null,"version":null,"lang":"en"},"defaults":{"child":null,"lang":"en","version":null}},"urlManagerOpts":{"lang":"en","parent":{"childrenProjects":[]},"project":{"subdomain":"woopra"},"version":"3.5"}},"sidebars":{"doc":[{"_id":"5b070d58b638340003442032","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","isAPI":false,"reference":false,"createdAt":"2018-05-24T19:07:04.534Z","from_sync":false,"order":5,"slug":"new-docs","title":"Introduction","__v":0,"pages":[{"_id":"5b19a754f2ce200003ddd255","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b070d58b638340003442032","user":"5ad7decda3740f0003a5f648","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-07T21:44:52.128Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"The modern customer journey is non-linear, omnichannel, and cyclical. Woopra was created out of the need to understand the customer experience by being truly channel and platform agnostic. Woopra pioneered individual-level customer analytics even before businesses identified the challenges with nonlinear customer journeys and fragmented product engagement. \n\nThe platform tracks user behavior across websites, through email, social media, paid media, sales, technical support, help desk, video, and most importantly, the engagement on the product/service itself. \n\nOver 25,000 organizations use Woopra to maximize the value of digital channels and convert visitors into customers and advocates. \n\nWoopra's Journey Analytics breaks free from the data silos of mobile, app, product, or web analytics. It combines these - and other essential touchpoints - to help users see the world as their customers do.","excerpt":"","slug":"introduction","type":"basic","title":"Introduction to Woopra","__v":0,"parentDoc":null,"updatedAt":"2020-05-30T09:00:10.133Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"children":[],"childrenPages":[]},{"_id":"5b0717421c18c60003849db8","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b070d58b638340003442032","user":"5ad7decda3740f0003a5f648","parentDoc":null,"updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-05-24T19:49:22.450Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":1,"body":"Woopra is an advanced customer analytics cloud service built with proprietary tracking technology that automatically builds detailed profiles of each customer in real-time. The profiles enable the user to view behavioral data of each customer based on their touchpoints throughout their digital journey - building behavioral segments, leveraging Woopra’s segmentation filters.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/be474f7-Image_2018-05-23_at_10.38.43_AM.png\",\n \"Image 2018-05-23 at 10.38.43 AM.png\",\n 1273,\n 593,\n \"#e8eefb\"\n ]\n }\n ]\n}\n[/block]\n\n[block:api-header]\n{\n \"title\": \"Tracking\"\n}\n[/block]\n**People**\n\nThe People module in Woopra consolidates all the customer data points into a single behavioral data stream. Woopra redefines customer analytics by giving a granular view of customers down to each individual or segment. Woopra is designed to track customer actions to give a truly accurate picture of each customer’s journey in one central view.\n\nThe People view gives users the ability to analyze and visualize customer actions by their web activity, page views, device type, email activity, help desk, payments, support, and many other applications.\n\n**Profiles**\n\nWoopra tracks anonymous and identified users giving users a comprehensive view of a customer's entire behavioral history in the form of a timeline based on their behaviors, event-based activity, demographics, social touchpoints, and organizational data. Woopra’s smart tracking technology enables users to identify customers across multiple devices and ensures that it shows all the customer information under one profile.\n\n**Customizable Schema**\n\nWoopra's schema defines what type of data is tracked by the users, how they want it to be displayed, and how it can be aggregated. Schemas can be based on both visitor data and action data. A basic schema is automatically generated from any custom action or visitor property, making it possible for users to aggregate data for smart filtering and powerful analytics reports quickly.\n\n**Custom Data**\n\nWith Woopra, users can create and track an unlimited number of custom actions. Custom actions are tracked by the built-in events installed automatically when users install an Integrations app or by adding code to send Woopra data on specific behaviors that a user might take while the customer is on the website or app, such as “signup”, “play video”, “add product to cart”, etc.\n[block:api-header]\n{\n \"title\": \"Reports\"\n}\n[/block]\nUsing built-in, highly customizable reporting, a user can easily view what kind of customer relationships are driving revenue and growth for an organization. Without going through the hassle of writing code, Woopra allows users to build powerful behavioral reports in a few steps to instantly give an entire picture of how prospects are engaging with the product or service. By giving a unified view of a wide range of custom events, a Woopra user can quickly build customer segments. For example, customers who are engaging with similar content can be bundled to offer suggestions about related items they may be interested in reading.\n\nIt is likely that an organization has already established steps to generate funnels in order to identify workflows of customer journeys and measure the conversion rates. Woopra is unique because unlike other traditional funnel mapping tools, Woopra's Journeys Reports store customer data in a 3-dimensional model which factors in vital elements impacting the customer journey that are rarely factored into the equation. This helps organizations avoid misguided assumptions and misplaced spending on optimization and personalization.\n\nWoopra’s Trends Reports allows users to monitor how your key metrics perform over time and what behavioral properties drive the organization's key metrics’ performance.\n\nUsers can measure and analyze how long visitors and customers continue to perform an action over the course of time with Woopra's Retention Reports.\n\nWoopra’s customer analytics is built so that users can stop spending time moving from one department to the other to collect relevant customer information and instead focus on generating data-driven reports which tell them what the customer is actually experiencing. This enables them to ask questions that were never thought of before.\n\n**People Reports**\n\nWoopra gives users the ability to build custom People Reports, leveraging Woopra’s segmentation filters. People reports' goal is to show which customers matter most to the business based on a vast number of behavioral, demographic, or application-specific criteria. People reports can be modified even further by adding custom columns that include visitor properties (e-mail, city, country, etc), segments, and dynamic fields. \n\n**Customer Journey Reports**\n\nWoopra’s Customer Journey reports are purposefully designed to map customer journeys step by step, allowing users to see how customers move from product engagement, website behavior, support requests, campaign sentiments, cross-functional departmental touchpoints – all within one report. Journey reports are one of Woopra's most powerful features which are designed to effectively bring down functional data silos and combine any set of actions for a complete view of the customer’s journey.\n\nJourney reports are 3-dimensional because of the ‘Optional Steps’ feature. Optional steps allow users to study the attribution of those goals towards success, even though customers are not required to take them. With optional steps, users can track alternative paths customers might take in order to complete their journey and have these represented within the original funnel as well. \n\nFor instance, are customers likely to convert if:\n\n* They use the API\n* They read the product setup guide\n* They invite a colleague\n* They come back from a retargeting campaign\n\nThe above customer journeys can be measured in a single Journey report, thus giving the user a complete picture of the customer journey, and an aggregate product sales revenue.\n\n**Trends Reports**\n\nWith Trends Reports, users will never be in the dark again about how key metrics are performing over time. For example, they can dig deeper and find out how seasonality affects their business revenue, or discover how customers from Europe behave differently than the users from North America. Trends Reports allows users to analyze any action tracked in Woopra within a fully customizable timeframe. They all can be customized and it’s super easy to share them with teammates so everyone in an organization is on top of their KPIs performance.\n\n**Retention and Churn**\n\nRetention reports help users see what actions customers take over time by illustrating how long customers continue to get value out of the product or service. For example, what actions do customers take to remain a customer, or what series of actions resulted in them dropping off the engagement funnel, and at what point of the funnel? Retention reports are completely shareable with other users making it possible to democratize customer data throughout the organization.\n\n\n[block:api-header]\n{\n \"title\": \"Triggers & Automations\"\n}\n[/block]\nFor a cloud service that automates innumerable actions in a matter of few seconds, Woopra is incredibly user-friendly and nimble. In Woopra, triggers allow users to define and set off actions based on a series of events and visitor properties.\n\n**Behavioral Triggers**\n\nUsers can build dynamic triggers based on multiple variables derived from behavioral data within Woopra. For example, users can add or update visitor properties when a visitor performs a specified action such as downloading a whitepaper on the user’s website. Users can also run custom scripts in order to trigger actions such as displaying discount messages or newsletter opt-ins.\n\n\n**Integrations Action Triggers**\n\nWoopra allows users to set up triggers to automatically perform actions in third party applications. With over 60 different third party integrations, users can set up a wide range of triggers such as create a lead in Salesforce when a customer signs up for your product demo or add a visitor to a Hubspot workflow to send a promotional email.\n\n**Automate Batch Tasks**\n\nWith Woopra, users can schedule automated batches on a repeated basis based on user actions or attributes. Scheduled tasks allow users to perform powerful actions such as data syncing, exporting email lists, add/update subscription groups based on user behavior, sending reports to colleagues and exporting email lists so that users can focus on other important tasks. With integrations such as Dropbox, Box and Mailchimp, Woopra empowers its users to share critical business insights and updates within their organization.\n[block:api-header]\n{\n \"title\": \"Integrations\"\n}\n[/block]\nTo get a full picture of customer engagement across all of these different tools, teams spend much of their time looking at siloed data snapshots and piecing them together into a full picture of their customers. Woopra solves this industry-wide problem by instantly connecting users to other tools in a matter of seconds. This greatly enriches the data from tracking custom events and identifying customers on the website or application with Woopra’s SDKs.\n\nWoopra’s Integrations technology raises users' sophistication across all marketing and support touchpoints, to bring a unique and quality experience. Integrations is an integration layer that offers users an ability to use pre-built plug-ins to enable data gathering across all their CRM, Payment, Mobile, Marketing Automation, Social, Support and many other tools.\n\nWoopra offers integrations with over 60 different applications across e-commerce, mobile, email marketing, website tracking, CRM, advertising, social, storage, personalization and productivity platforms. These integrations allow users to take control of their organization’s data and centralize it in one single platform.","excerpt":"","slug":"what-is-woopra-product-capabilities","type":"basic","title":"What is Woopra: Product Capabilities","__v":0,"updatedAt":"2020-11-12T03:19:32.346Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"children":[{"_id":"5b453d50fa1455000304187e","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b070d58b638340003442032","user":"5e14d778c12c2802e836097a","parentDoc":"5b0717421c18c60003849db8","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-07-10T23:12:16.093Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"Understanding how Woopra ingests, structures and reveals data is an important step to ensuring users gain the most value possible out of the platform. \n\nAction properties, Visit properties, and Visitor properties are the foundation of the user's Woopra data structure. It’s imperative to understand the differences between them when building behavioral reports to get a better insight into the product. We recommend putting together a robust plan of what action and visitor properties are important and working with developers on implementing custom tracking to capture these data points.\n[block:api-header]\n{\n \"title\": \"Action Data\"\n}\n[/block]\nAction data consists of every behavioral event the user sets up to be tracked in Woopra. This could include actions such as:\n\n* blog post views\n* payments\n* signups\n* logins, and so on\n\nEssentially, any action that a visitor or customer performs is considered an action. These are completely customizable based on the integrations installed or can be custom actions that align with the unique customer journey.\n\nNot sure how to begin tracking action data in Woopra? Check out our [Getting Started Guide](https://docs.woopra.com/docs/getting-started-guide-the-woopra-essentials-mix) or consult with your developers to determine which custom actions make the most sense for your business.\n\n## Action Properties\n\nTracking actions in Woopra is a great start, but, wouldn’t it be helpful to know a little more about each action the customers take? In practice, when a visitor performs the action “pageview,” users can find out what page was viewed, how long the customers there, what device was used, and so on.\n\nThis is where action properties come into play. Think of action properties as specific attributes that provide additional details for each event you’re tracking.\n\nFor example, users may want to track every time a customer makes a payment; one could send the “Payment” action to Woopra, along with associated properties such as:\n\n* payment amount\n* user plan or package\n* payment option (e.g., credit card, Paypal, ACH), and so on.\n\n**Applying Action Properties**\n\nAction Properties can be leveraged in Woopra’s behavioral segments and analytics reports when a specific action the user wants to take a closer look at is defined. For instance, if they are looking at the payment action discussed above, the user can select “Plan equals Enterprise” as a property defining this action. Woopra would return all users/actions matching this constraint.\n[block:api-header]\n{\n \"title\": \"Visit Data\"\n}\n[/block]\nAnother important concept to keep in mind when analyzing actions in Woopra is visit data and visit properties.\n\nVisit properties define the current state of a customer active session whenever the session is being performed. Examples of visit properties are:\n\n* customer location\n* the platform a customer is on while engaging with the product\n* browser\n\nWoopra tracks all visit properties out of the box and users can find the full list of all visit properties being tracked by Woopra [here](https://docs.woopra.com/docs/generated-visit-properties).\n\n**Applying Visit Properties**\n\nSimilarly to action properties, visit properties can help users to be more specific in defining an action they want to analyze. For example, applying visit properties, one can see all the customers who’ve made a payment from the US when the visit property constraint is set to “Country is USA.” Alternatively, if a user doesn’t want to select a particular action, but wants to analyze a specific visit property, selecting USA as a visit property will show all the customers from the United States who’ve engaged with the product.\n[block:api-header]\n{\n \"title\": \"Visitor Data\"\n}\n[/block]\nVisitor data can be any information you want to track about your customers:\n\n* Name\n* Email address\n* Company\n* Role\n\n## Visitor Properties\n\nVisitor properties define a customer's current state and help users segment customers by their firmographic, demographic, or behavioral attributes. Examples of visitor properties could be the email address, their company, age, gender, the original referrer, or any other attribute that defines the customer and helps the user to understand their personas better. Unlike visit properties, most of visitor properties don’t change dynamically and reflect the state of a customer, not their session.\n\nVisitor properties in Woopra can help answer the following questions:\n\n* How many people from company X have engaged with my product in the last 30 days?\n* How many people older than 30 years old have made a purchase on my website within the last year?\n* Are user’s with a Marketing title more likely to convert than those whose title contains Sales?\n* Are users who originally came to my website from Google Adwords more engaged with my product than those who came from Facebook ads?\n\nVisitor properties can be leveraged in Woopra’s Segmentation filters to define a behavioral audience you want to analyze. More on Woopra’s segmentation can be found [here](https://docs.woopra.com/docs/segmentation-filters).","excerpt":"","slug":"understanding-data-in-woopra","type":"basic","title":"Understanding Data in Woopra","__v":0,"updatedAt":"2020-11-12T03:24:59.231Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false},{"_id":"5b088be15068ef0003cbb32b","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b070d58b638340003442032","user":"5ad7decda3740f0003a5f648","parentDoc":"5b0717421c18c60003849db8","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-05-25T22:19:13.077Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":1,"body":"[block:api-header]\n{\n \"title\": \"1) Non-linear Customer Journeys and Challenges in Data Democratization\"\n}\n[/block]\nThe modern customer journey is highly complex and non-linear in nature. To understand the customer experience across channels, teams and tools, you must expand beyond the silos of strictly marketing or product-related touchpoints.\n\nToday’s businesses need to derive insights from across the organization, leveraging marketing, paid and unpaid advertising, customer success, product, support, sales and other groups within the company.\n\nMost businesses find it challenging to democratize data across the organization and obtain a 360-degree view of their customers to drive end-to-end business objectives.\n[block:api-header]\n{\n \"title\": \"2) Limited Understanding of Product Engagement\"\n}\n[/block]\nIt’s crucial to know how prospective users engage with your product or service in order to identify leads at the right time and on the right channel. This is especially true for SaaS companies that offer a ‘freemium’ [model](https://www.business2community.com/product-management/build-sales-accelerating-product-qualified-lead-engine-01696527) when acquiring new customers. Often, they spend an unreasonable amount of time and resources on lead acquisition by sending repeated communications to prospects on an action such as a free trial sign up form.\n\nUnfortunately, given the vast array of options available out there, such actions are no more telling of the lead’s propensity to purchase. What’s worse is that unwanted emails or calls can do more harm than good by deterring them from your product or service altogether.\n\nFor a company focused on the customer experience, actions such as repeated use of certain features, downloading how-to tutorials, and viewing software setup videos are much more indicative of interested prospects. However, there are few tools that track behavior across a product or service while enabling teams to engage with their users in real-time.\n[block:api-header]\n{\n \"title\": \"3) Functional Data Siloes\"\n}\n[/block]\nWith an estimated 66 different SaaS applications that are in use per enterprise – primarily for web and social traffic based analytics activity – companies are unable to properly leverage the data flowing in their organization to generate meaningful and timely insights.\n\nMoreover, the market is crowded with solutions promising results such as higher conversion rates that are generating further confusion about what solution to implement, at what cost, and at what time. Such a conundrum gives rise to data siloes that often fail to render timely insights to business users. Most importantly, companies often fail to realize how difficult it is to bring all the customer-centric data together in order to find a single source of truth.\n\nGiven the fragmentation of investments in tools across all sizes of enterprises, a unifying customer journey [analytics solution](https://blog.woopra.com/choosing-the-right-data-integration-tool-for-your-business-4ae46e62551b) integrates with all the relevant applications to provide a singular view of each customer and better analyze their interaction and needs across all channels. Companies need to anticipate their customers’ behaviors and shift how they think about and engage throughout the decision journey.\n[block:api-header]\n{\n \"title\": \"4) Inability to Monetize from Data\"\n}\n[/block]\nAlthough every organization is now aware that data is their gold mine, few have managed to establish a sound data strategy that will allow them to consistently monetize from it. Most companies have trouble simplifying their data architectures to build a single layer that augments all the relevant customer-related information in one central location. Connecting with leads and channelizing efforts to truly convert engagement to revenue is that piece of the puzzle that unfortunately many are still trying to solve.","excerpt":"","slug":"challenges-the-woopra-platform-solves","type":"basic","title":"Challenges the Woopra Platform Solves","__v":0,"updatedAt":"2020-11-12T03:26:13.285Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false}],"childrenPages":[{"_id":"5b453d50fa1455000304187e","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b070d58b638340003442032","user":"5e14d778c12c2802e836097a","parentDoc":"5b0717421c18c60003849db8","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-07-10T23:12:16.093Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"Understanding how Woopra ingests, structures and reveals data is an important step to ensuring users gain the most value possible out of the platform. \n\nAction properties, Visit properties, and Visitor properties are the foundation of the user's Woopra data structure. It’s imperative to understand the differences between them when building behavioral reports to get a better insight into the product. We recommend putting together a robust plan of what action and visitor properties are important and working with developers on implementing custom tracking to capture these data points.\n[block:api-header]\n{\n \"title\": \"Action Data\"\n}\n[/block]\nAction data consists of every behavioral event the user sets up to be tracked in Woopra. This could include actions such as:\n\n* blog post views\n* payments\n* signups\n* logins, and so on\n\nEssentially, any action that a visitor or customer performs is considered an action. These are completely customizable based on the integrations installed or can be custom actions that align with the unique customer journey.\n\nNot sure how to begin tracking action data in Woopra? Check out our [Getting Started Guide](https://docs.woopra.com/docs/getting-started-guide-the-woopra-essentials-mix) or consult with your developers to determine which custom actions make the most sense for your business.\n\n## Action Properties\n\nTracking actions in Woopra is a great start, but, wouldn’t it be helpful to know a little more about each action the customers take? In practice, when a visitor performs the action “pageview,” users can find out what page was viewed, how long the customers there, what device was used, and so on.\n\nThis is where action properties come into play. Think of action properties as specific attributes that provide additional details for each event you’re tracking.\n\nFor example, users may want to track every time a customer makes a payment; one could send the “Payment” action to Woopra, along with associated properties such as:\n\n* payment amount\n* user plan or package\n* payment option (e.g., credit card, Paypal, ACH), and so on.\n\n**Applying Action Properties**\n\nAction Properties can be leveraged in Woopra’s behavioral segments and analytics reports when a specific action the user wants to take a closer look at is defined. For instance, if they are looking at the payment action discussed above, the user can select “Plan equals Enterprise” as a property defining this action. Woopra would return all users/actions matching this constraint.\n[block:api-header]\n{\n \"title\": \"Visit Data\"\n}\n[/block]\nAnother important concept to keep in mind when analyzing actions in Woopra is visit data and visit properties.\n\nVisit properties define the current state of a customer active session whenever the session is being performed. Examples of visit properties are:\n\n* customer location\n* the platform a customer is on while engaging with the product\n* browser\n\nWoopra tracks all visit properties out of the box and users can find the full list of all visit properties being tracked by Woopra [here](https://docs.woopra.com/docs/generated-visit-properties).\n\n**Applying Visit Properties**\n\nSimilarly to action properties, visit properties can help users to be more specific in defining an action they want to analyze. For example, applying visit properties, one can see all the customers who’ve made a payment from the US when the visit property constraint is set to “Country is USA.” Alternatively, if a user doesn’t want to select a particular action, but wants to analyze a specific visit property, selecting USA as a visit property will show all the customers from the United States who’ve engaged with the product.\n[block:api-header]\n{\n \"title\": \"Visitor Data\"\n}\n[/block]\nVisitor data can be any information you want to track about your customers:\n\n* Name\n* Email address\n* Company\n* Role\n\n## Visitor Properties\n\nVisitor properties define a customer's current state and help users segment customers by their firmographic, demographic, or behavioral attributes. Examples of visitor properties could be the email address, their company, age, gender, the original referrer, or any other attribute that defines the customer and helps the user to understand their personas better. Unlike visit properties, most of visitor properties don’t change dynamically and reflect the state of a customer, not their session.\n\nVisitor properties in Woopra can help answer the following questions:\n\n* How many people from company X have engaged with my product in the last 30 days?\n* How many people older than 30 years old have made a purchase on my website within the last year?\n* Are user’s with a Marketing title more likely to convert than those whose title contains Sales?\n* Are users who originally came to my website from Google Adwords more engaged with my product than those who came from Facebook ads?\n\nVisitor properties can be leveraged in Woopra’s Segmentation filters to define a behavioral audience you want to analyze. More on Woopra’s segmentation can be found [here](https://docs.woopra.com/docs/segmentation-filters).","excerpt":"","slug":"understanding-data-in-woopra","type":"basic","title":"Understanding Data in Woopra","__v":0,"updatedAt":"2020-11-12T03:24:59.231Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false},{"_id":"5b088be15068ef0003cbb32b","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b070d58b638340003442032","user":"5ad7decda3740f0003a5f648","parentDoc":"5b0717421c18c60003849db8","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-05-25T22:19:13.077Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":1,"body":"[block:api-header]\n{\n \"title\": \"1) Non-linear Customer Journeys and Challenges in Data Democratization\"\n}\n[/block]\nThe modern customer journey is highly complex and non-linear in nature. To understand the customer experience across channels, teams and tools, you must expand beyond the silos of strictly marketing or product-related touchpoints.\n\nToday’s businesses need to derive insights from across the organization, leveraging marketing, paid and unpaid advertising, customer success, product, support, sales and other groups within the company.\n\nMost businesses find it challenging to democratize data across the organization and obtain a 360-degree view of their customers to drive end-to-end business objectives.\n[block:api-header]\n{\n \"title\": \"2) Limited Understanding of Product Engagement\"\n}\n[/block]\nIt’s crucial to know how prospective users engage with your product or service in order to identify leads at the right time and on the right channel. This is especially true for SaaS companies that offer a ‘freemium’ [model](https://www.business2community.com/product-management/build-sales-accelerating-product-qualified-lead-engine-01696527) when acquiring new customers. Often, they spend an unreasonable amount of time and resources on lead acquisition by sending repeated communications to prospects on an action such as a free trial sign up form.\n\nUnfortunately, given the vast array of options available out there, such actions are no more telling of the lead’s propensity to purchase. What’s worse is that unwanted emails or calls can do more harm than good by deterring them from your product or service altogether.\n\nFor a company focused on the customer experience, actions such as repeated use of certain features, downloading how-to tutorials, and viewing software setup videos are much more indicative of interested prospects. However, there are few tools that track behavior across a product or service while enabling teams to engage with their users in real-time.\n[block:api-header]\n{\n \"title\": \"3) Functional Data Siloes\"\n}\n[/block]\nWith an estimated 66 different SaaS applications that are in use per enterprise – primarily for web and social traffic based analytics activity – companies are unable to properly leverage the data flowing in their organization to generate meaningful and timely insights.\n\nMoreover, the market is crowded with solutions promising results such as higher conversion rates that are generating further confusion about what solution to implement, at what cost, and at what time. Such a conundrum gives rise to data siloes that often fail to render timely insights to business users. Most importantly, companies often fail to realize how difficult it is to bring all the customer-centric data together in order to find a single source of truth.\n\nGiven the fragmentation of investments in tools across all sizes of enterprises, a unifying customer journey [analytics solution](https://blog.woopra.com/choosing-the-right-data-integration-tool-for-your-business-4ae46e62551b) integrates with all the relevant applications to provide a singular view of each customer and better analyze their interaction and needs across all channels. Companies need to anticipate their customers’ behaviors and shift how they think about and engage throughout the decision journey.\n[block:api-header]\n{\n \"title\": \"4) Inability to Monetize from Data\"\n}\n[/block]\nAlthough every organization is now aware that data is their gold mine, few have managed to establish a sound data strategy that will allow them to consistently monetize from it. Most companies have trouble simplifying their data architectures to build a single layer that augments all the relevant customer-related information in one central location. Connecting with leads and channelizing efforts to truly convert engagement to revenue is that piece of the puzzle that unfortunately many are still trying to solve.","excerpt":"","slug":"challenges-the-woopra-platform-solves","type":"basic","title":"Challenges the Woopra Platform Solves","__v":0,"updatedAt":"2020-11-12T03:26:13.285Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false}]}]},{"_id":"5b08a803f760060003fd8997","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","isAPI":false,"reference":false,"createdAt":"2018-05-26T00:19:15.721Z","from_sync":false,"order":6,"slug":"getting-started","title":"Getting Started","__v":0,"pages":[{"_id":"5b08a7cff760060003fd898c","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b08a803f760060003fd8997","user":"5adfa297452bd900036d0f67","updates":["5c3fae711796e2005db6ad0c"],"next":{"pages":[],"description":""},"createdAt":"2018-05-26T00:18:23.941Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Need help getting started?\",\n \"body\": \"Our Pro plan comes with an included 1-hour onboarding sessions to help get you on the right track with Woopra. \\n\\nIn addition, we also offer customized comprehensive multi-session onboarding packages. With these packages, we'll deep-dive into your product and work with you to list out all your important tracking events and make sure you're set up for success. Please contact [[email protected]](mailto:[email protected]) for more information.\"\n}\n[/block]\nHere we will go through what you will need to get started with Woopra. Once you sign up and log in to your Dashboard, you will be asked to start tracking your data: \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/2d1e3e3-gettingstartedintro1.png\",\n \"gettingstartedintro1.png\",\n 2878,\n 580,\n \"#d4e1f9\"\n ]\n }\n ]\n}\n[/block]\n## Tracking Data In Woopra\n\n### Step One: Install the Javascript Tracking Snippet to see Your First Customer Profile\n\nWoopra’s proprietary tracking technology tracks user behavior across your website, product and mobile app. To get started, simply insert [Woopra Javascript Tracking Code](https://app.woopra.com/project/~/configure/snippets/javascript) to the tag of the website or single-page application pages you’d like to track.\n\nThere are several other ways you can start tracking data instantly in Woopra. If you’re using a tool like [Segment](https://segment.com/docs/destinations/woopra/), you can install the integration to stream any actions already housed in Segment into the Woopra platform.\n\nOnce set up, navigate to “People” in Woopra and watch as your Woopra Customer Profiles populate. Initially, it will probably look similar to the below anonymous profile. To begin identifying your visitors and users, move on to step two!\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/7d683a2-Screen-Shot-2018-02-21-at-1.18.28-PM.png\",\n \"Screen-Shot-2018-02-21-at-1.18.28-PM.png\",\n 2264,\n 1476,\n \"#f7f8fa\"\n ],\n \"caption\": \"Woopra's Profile\"\n }\n ]\n}\n[/block]\n\n### Step Two: Identify Visitors and Users on Your Website and Web Application\n\nWhen visitors browse your website or users sign up for your product, you’ll want to collect this information and send it to Woopra. This will allow Woopra to identify who they are and merge the anonymous profile into a unified customer profile.\n\nYou can send any [custom visitor data](https://docs.woopra.com/docs/custom-actions-and-visitor-data) to Woopra by adding the[ identify() function](https://app.woopra.com/project/~/configure/snippets/javascript) anywhere a user is identified for the first time. For example, you can add the identify() function on your website to a demo request form.\n\nBe sure to include the email address so that this can be leveraged as the unique identifier, along with any other relevant properties you’re collecting, such as company name, size, location, etc.\n\n### Step Three: Track Custom Actions to Tailor Woopra to your Business\n[block:callout]\n{\n \"type\": \"success\",\n \"body\": \"Before you start tracking custom events, it's important to write down all the events you want to track to stay organized. Download an example spreadsheet [here](https://docs.google.com/spreadsheets/d/14nXiPpcYsIWMARD3RFcwtUlwEtCBfjPLKAhDdgB3HKU/edit?usp=sharing) which you can use.\",\n \"title\": \"Get Organized\"\n}\n[/block]\nInterested in tracking when your visitors sign up? When customers make a payment? When leads watch a video on your website? Track your first [custom action](https://docs.woopra.com/docs/custom-actions-and-visitor-data) to see how Woopra can be completely customized to track the metrics that matter most to your business.\n\nWoopra allows you to track any combination of custom actions such as payments, logins, product engagement, etc. Use the track(eventName, properties) function to send a custom event that describes a milestone. See the below example for an idea of how you can send a custom payment action, along with any associated properties such as the amount and currency.\n\nOnce you begin identifying users and tracking custom actions, such as a payment, profiles will automatically populate these actions in real-time as users take them.\n\n- [Learn more about tracking custom actions](https://docs.woopra.com/docs/custom-actions-and-visitor-data).\n- Not sure what to track? Check out our [SaaS](https://docs.woopra.com/docs/saas-tracking) and [eCommerce What to Track Guides](https://docs.woopra.com/docs/ecommerce-tracking).\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/ff7f153-PaidCustomerProfile-1.png\",\n \"PaidCustomerProfile-1.png\",\n 2276,\n 1480,\n \"#f7f8fb\"\n ]\n }\n ]\n}\n[/block]\n### Step Four: Edit Your Schema to Help Every Employee Understand Your Data\n\nConsider the Woopra Schema your personal data dictionary, outlining the different data sources and types with descriptions that everyone on your team can understand. Once you track your first custom action, navigate the Configure section of Woopra and click to view your Visitor or Action Data Schemas.\n\nNotice in the GIF below how you can update the name, description and corresponding template that displays when a user takes the action. Adding more dynamic tags in the template description will help every employee access the most relevant data for that user or action directly within the customer profile.\n\n- [Learn Why We Built a Customizable Woopra Schema](https://blog.woopra.com/why-we-built-a-customizable-woopra-schema-96952f4e87)\n- [Learn more about Configuring your Schema](https://docs.woopra.com/docs/configuring-your-schema)\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/34d5036-gif-1.gif\",\n \"gif-1.gif\",\n 1338,\n 688,\n \"#ebf1f9\"\n ]\n }\n ]\n}\n[/block]\n### Step Five: Integrate Woopra with the Tools you Already use to Unify Touchpoints Across the Organization\n\nThe greatest challenge to improving the customer experience is unifying it. Integrate Woopra in a few clicks with your favorite email, text, push notification, product, support, live chat tools and more. Leverage this data across the platform to analyze the end-to-end experience users have with your brand – from tweets to clicks to conversion and back again.\n\nThe majority of integrations include pre-built [Triggers and Automations](https://docs.woopra.com/docs/triggers) that allow you to take real-time action on your data in 3rd-party tools. For example, the [Salesforce integration](https://www.woopra.com/salesforce/) includes a trigger allowing you to automatically updated a lead or contact status based on a user’s behavior, attributes and engagement.\n\nIntegrations such as [Zendesk](https://www.woopra.com/integrations/zendesk) and [Salesforce](https://www.woopra.com/salesforce/) also include the ability to embed Woopra’s real-time People Profiles directly within the tools. Having Woopra’s people profiles embedded directly within Zendesk for example, allows support teams to see every action taken by that user or customer prior to submitting a support ticket. This provides a foundation for resolving support inquiries with increased efficiency and greater personalization.\n\n- [Learn more about how to use integrations](https://https://docs.woopra.com/docs/integrations)\n- [Browse our integration marketplace to find your tools](https://docs.woopra.com/docs/integrations) \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/4a627ec-Screen-Shot-2018-02-26-at-2.43.48-PM.png\",\n \"Screen-Shot-2018-02-26-at-2.43.48-PM.png\",\n 2880,\n 1800,\n \"#edf2f9\"\n ]\n }\n ]\n}\n[/block]\n### Step Six: Step Six: Build Your First Journey Report to See the World as Your Customers Do\n\nCombine any set of actions, events, or goals to understand how users move across campaigns, through your website, within your application, and beyond!\n\n[This post](https://blog.woopra.com/how-to-leverage-funnel-analytics-to-see-the-world-as-your-customers-do-6ebd8ee2af6d) highlights some of the key features and benefits of Woopra’s Customer Journey Reports.\n\nThese reports allow you to answer questions such as:\n\n- Which of my marketing campaigns drove the most conversions last year?\n- Where am I losing potential users during onboarding?\n- What are my highest performing customer segments?\n- How many users read documentation or submit a support ticket before becoming a customer?\n\n[Learn More About Customer Journey Reports](https://docs.woopra.com/docs/journeys-v3) \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/5beb0a6-WoopraJourneyNoPopUP.png\",\n \"WoopraJourneyNoPopUP.png\",\n 2212,\n 762,\n \"#f1f4f8\"\n ]\n }\n ]\n}\n[/block]\n### Step Seven: Monitor and analyze the growth of key metrics over time with your first Trends Report\n\nTrends Reports help you understand how most relevant metrics to your business change over time and the underlying forces behind these changes. With Trends, you can easily understand which mobile platform brings in the most revenue to your business or which city or country has the most engaged users.\n\nCreate your first Trends Report to answer questions such as:\n\n- How are subscriptions trending over time by package or plan type?\n- Which product features are used most and by whom?\n- Are mobile users more engaged as compared to those that use the web app? For mobile users, how active are iOS users compared to Android users?\n- How is signup growth trending month over month and in what regions?\n\n[Learn more about Trends Reports](https://docs.woopra.com/docs/trends)\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/e3683b0-trends_top.png\",\n \"trends top.png\",\n 2320,\n 658,\n \"#f3f5fa\"\n ]\n }\n ]\n}\n[/block]\n### Step Eight: Measure User Retention to Increase Customer Lifetime Value with Your First Retention Report\n\nRetention reports tell you if users continue to do important actions, such as making purchases, using your product, or even opening your emails. Finally, understand if users are engaged enough with your offerings to keep coming back. Build your first Retention Report to learn where you’re losing customers and how to get them coming back!\n\nRetention Reports allow you to answer questions such as:\n\n- Do users continue to take important actions, such as making purchases, use your product, or even open your emails?\n- How long customers continue to take a specific action after signing up?\n- Are users more likely to convert after downloading my mobile application?\n\n[Learn more about Retention Reports](https://docs.woopra.com/docs/retention)\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/5ce20ea-Retention.png\",\n \"Retention.png\",\n 2296,\n 1584,\n \"#f9fafc\"\n ]\n }\n ]\n}\n[/block]\n### Step Nine: Create your First Segment to Begin Analyzing Users by who they are and what they do\n\nSegments are a way of saving customer behavioral groups that are important to you. For example, you may want to save a “Submitted Ticket” customer segment, to monitor users who’ve sought out help or an “at-risk of leaving” customer segment to monitor, analyze, and compare these users.\n\nNavigate to the “Configure” section to create your first dynamic Woopra Segment! Filter by any action or any action/visit/visitor property. You can also create Segments on the fly in the “Performed By” section of any Woopra Report.\n\nOnce you’ve identified a group of users you’d like to save, click “Create” to begin leveraging this segment throughout Woopra reporting, automation, reporting and analysis.\n\n[Learn more about Segmentation](https://docs.woopra.com/docs/how-to-create-segments) \n\n### Step Ten: Create Your First Trigger to Automate Personalization, Engagement and Tasks Outside of Woopra\n\nAfter installing a few of Woopra’s [one-click integrations](https://www.woopra.com/appconnect/), you’ll instantly see associated “Trigger Actions” appear in the “Automate” section that can be used to take action outside of Woopra in the tools you have integrated.\n\nFor example, the [Zendesk Integration ](https://www.woopra.com/appconnect/zendesk) allows you to automatically update ticket priority based on a user’s behavior or attributes. The [Google AdWords integration](https://www.woopra.com/appconnect/adwords) will allow you to sync any custom segments from Woopra into AdWords to fuel more personalized retargeting campaigns. The [HubSpot integration](https://www.woopra.com/appconnect/hubspot) allows you to automatically enroll users in a drip campaign when they meet certain engagement criteria and so on.\n\n[Learn more about Triggers and Automations](https://docs.woopra.com/docs/triggers)\n\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/ebb366a-Triggers_1.png\",\n \"Triggers (1).png\",\n 2378,\n 1602,\n \"#fcfbfc\"\n ]\n }\n ]\n}\n[/block]\nCongratulations! You’ve covered the fundamentals of the Woopra platform. Now that you’re a Woopra champ – it’s time to invite your colleagues to join. [Invite other users to Woopra](https://docs.woopra.com/docs/how-to-share-woopra-with-users) and start harnessing the power of unified customer data.","excerpt":"10-Steps to Get Familiar with the Woopra Platform and Unleash Your Inner Data Scientist!","slug":"getting-started-guide-the-woopra-essentials-mix","type":"basic","title":"Getting Started with Woopra","__v":1,"parentDoc":null,"updatedAt":"2020-11-12T03:29:52.290Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2020-10-22T19:18:03.234Z","children":[{"_id":"5b08aa05d88b0b0003f7843c","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b08a803f760060003fd8997","user":"5adfa297452bd900036d0f67","parentDoc":"5b08a7cff760060003fd898c","updates":["5ea72a0493f75502449204cb"],"next":{"pages":[],"description":""},"createdAt":"2018-05-26T00:27:49.211Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"Woopra is designed to be accessible by multiple groups of users. Each user can customize their own setup that includes their personal Dashboard as well as fully customizable Trends, Journeys, Retention, and People Reports.\n\nTo share Woopra with colleagues, click on the Configure button in the navigation bar, and then select “Users” under the User section of the sidebar. Next, click on the “New User” button in the upper right-hand corner to invite a team member.\n\nOnce the new user is created, set their “Groups” associations, then click the “Create” button. An email will be automatically sent inviting them to join Woopra. If they already have a Woopra account, the website will be automatically shared with their account.\n[block:api-header]\n{\n \"title\": \"Account Types\"\n}\n[/block]\nPeople invited to Woopra can be added as either Administrators or Users. Each project can have multiple Administrators, but only one Owner.\n\n* Owner is an Administrator who can also update the website package and manage billing information. The Owner will have a lock key next to their name in the left-side agent list.\n* Administrators can add/remove/update other users’ Group settings. They can also update the global project settings like the timezone and Schema.\n* Users can set up their own configuration but they cannot add or remove other users or change global website settings.\n\nOnly Administrators can see the website’s Settings view.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/b5ac488-User.png\",\n \"User.png\",\n 2876,\n 1650,\n \"#edf3fb\"\n ]\n }\n ]\n}\n[/block]\n\n[block:api-header]\n{\n \"title\": \"Group Permissions\"\n}\n[/block]\nClick on the “Groups” button in the User section of the sidebar. There, you’ll be to see all groups of users within your project and their permissions. Each Group of Users can be granted/revoked permissions when you click on a group and select “On/Off” for each module (people, reports, engagement). This allows Administrators control over which parts of their data are shared with each Group.\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/8a7a337-group.png\",\n \"group.png\",\n 2880,\n 1652,\n \"#edf3fb\"\n ]\n }\n ]\n}\n[/block]","excerpt":"","slug":"how-to-share-woopra-with-users","type":"basic","title":"How to Share Woopra with Users","__v":1,"updatedAt":"2018-06-06T18:17:49.623Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false}],"childrenPages":[{"_id":"5b08aa05d88b0b0003f7843c","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b08a803f760060003fd8997","user":"5adfa297452bd900036d0f67","parentDoc":"5b08a7cff760060003fd898c","updates":["5ea72a0493f75502449204cb"],"next":{"pages":[],"description":""},"createdAt":"2018-05-26T00:27:49.211Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"Woopra is designed to be accessible by multiple groups of users. Each user can customize their own setup that includes their personal Dashboard as well as fully customizable Trends, Journeys, Retention, and People Reports.\n\nTo share Woopra with colleagues, click on the Configure button in the navigation bar, and then select “Users” under the User section of the sidebar. Next, click on the “New User” button in the upper right-hand corner to invite a team member.\n\nOnce the new user is created, set their “Groups” associations, then click the “Create” button. An email will be automatically sent inviting them to join Woopra. If they already have a Woopra account, the website will be automatically shared with their account.\n[block:api-header]\n{\n \"title\": \"Account Types\"\n}\n[/block]\nPeople invited to Woopra can be added as either Administrators or Users. Each project can have multiple Administrators, but only one Owner.\n\n* Owner is an Administrator who can also update the website package and manage billing information. The Owner will have a lock key next to their name in the left-side agent list.\n* Administrators can add/remove/update other users’ Group settings. They can also update the global project settings like the timezone and Schema.\n* Users can set up their own configuration but they cannot add or remove other users or change global website settings.\n\nOnly Administrators can see the website’s Settings view.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/b5ac488-User.png\",\n \"User.png\",\n 2876,\n 1650,\n \"#edf3fb\"\n ]\n }\n ]\n}\n[/block]\n\n[block:api-header]\n{\n \"title\": \"Group Permissions\"\n}\n[/block]\nClick on the “Groups” button in the User section of the sidebar. There, you’ll be to see all groups of users within your project and their permissions. Each Group of Users can be granted/revoked permissions when you click on a group and select “On/Off” for each module (people, reports, engagement). This allows Administrators control over which parts of their data are shared with each Group.\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/8a7a337-group.png\",\n \"group.png\",\n 2880,\n 1652,\n \"#edf3fb\"\n ]\n }\n ]\n}\n[/block]","excerpt":"","slug":"how-to-share-woopra-with-users","type":"basic","title":"How to Share Woopra with Users","__v":1,"updatedAt":"2018-06-06T18:17:49.623Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false}]}]},{"_id":"5d0157e5dba6ec001c22b539","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","isAPI":false,"reference":false,"createdAt":"2019-06-12T19:52:05.311Z","order":7,"slug":"guides","title":"Guides","__v":0,"pages":[{"_id":"5b15a4ac34eb070003426a6d","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5d0157e5dba6ec001c22b539","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-04T20:44:28.536Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"Knowing what to track in Woopra is a very important step. Depending on your business, certain metrics and tracking events can be more or less important to you when understanding your customer's journey. The most common applications are [SaaS](https://docs.woopra.com/docs/saas-tracking) and [eCommerce](https://docs.woopra.com/docs/ecommerce-tracking) tracking. Be sure to check out our guides to help you determine what to track.\n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Organize your tracking!\",\n \"body\": \"Before you start tracking your custom events, it's important to write down all the events you want to track to stay organized. Download an example spreadsheet [here](https://docs.google.com/spreadsheets/d/14nXiPpcYsIWMARD3RFcwtUlwEtCBfjPLKAhDdgB3HKU/edit?usp=sharing) which you can use.\"\n}\n[/block]","excerpt":"","slug":"what-to-track-saas-and-ecommerse","type":"basic","title":"What to Track - SaaS and eCommerce","__v":0,"parentDoc":null,"updatedAt":"2019-07-01T18:59:34.192Z","metadata":{"title":"","description":"","image":[]},"children":[{"_id":"5b15ba1c8e087100030613cf","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5d0157e5dba6ec001c22b539","user":"5ad7decda3740f0003a5f648","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-04T22:15:56.794Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"## The Ultimate Action Tracking Setup Guide: eCommerce Edition\n\nWe wrote a post featuring Best Practices for Custom Event Collection to help new Woopra users get started with the fundamentals of tracking their customer data.\n\nWhile this was an excellent place to kick-off, it’s important to remember that every industry and vertical is unique. For example, an eCommerce company will want to track different actions than a Mobile Gaming or Travel company, and so on. To help guide you through this process, we’ve gone a step further and put together tips and best practices by industry. So, without further ado, here is: **The Ultimate Tracking Setup Guide: eCommerce Edition.**\n\n## Identifying Key Customer Lifecycle Moments for eCommerce\n\neCommerce stores have a distinct advantage over bricks and mortar retail locations – the ability to track and understand every action a customer takes. But beyond the simple pageviews, deciding exactly which of these actions to track is where the work begins.\n\nIf you’re using [Magento](https://www.woopra.com/appconnect/magento), [WooCommerce](https://www.woopra.com/integrations/woocommerce) or [Shopify](https://www.woopra.com/integrations/shopify), you can streamline this process by installing the Integrations with a few clicks. This will automatically begin tracking relevant eCommerce platform events right out of the box! But what if you’re not using Magento or Shopify? \n\nWe’ve combed through the most successful eCommerce companies using Woopra and identified trends in what they’re tracking to provide you with a foundation for getting started. So whether you’re a startup just beginning to track your customer data or an established brand looking to expand, here are the actions that will get you on the road to designing better customer experiences with data.\n\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"Keep in mind that the help of a developer will be required to code the custom actions you’d like to track. But, by using this guide, you’ll be able to outline the key actions first to **significantly cut down on implementation and development time!**\"\n}\n[/block]\n## Tracking Marketing Website Actions\n\n### Tracking Anonymous Website Traffic\n\nWoopra is designed to track unique, unidentified website and mobile app users from their first touch. The user is assigned a unique ID and all of their anonymous activity is tracked in the customer profile. You’ll also have data regarding the user’s location, system, platform, referrer (if applicable) and more!\n\nOnce the user is identified – through signing up, subscribing, or a similar activity – all previous anonymous activity will be merged into the same [Profile](https://docs.woopra.com/docs/profiles). This provides a complete picture of the full lifecycle for every user, starting with the first touch.\n\nTo start tracking anonymous website traffic:\n\n- Customize the domain name in the snippet below.\n- Copy and paste the Woopra [Javascript tracking code](https://docs.woopra.com/reference) into the head section of your website pages.\n- Ensure the code is pasted into every page of your site that you’d like to track.\n\n**Woopra Javascript Tracking Code**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\n!function(){var a,b,c,d=window,e=document,f=arguments,g=\\\"script\\\",h=[\\\"config\\\",\\\"track\\\",\\\"trackForm\\\",\\\"trackClick\\\",\\\"identify\\\",\\\"visit\\\",\\\"push\\\",\\\"call\\\"],i=function(){var a,b=this,c=function(a){b[a]=function(){return b._e.push([a].concat(Array.prototype.slice.call(arguments,0))),b}};for(b._e=[],a=0;a<h.length;a++)c(h[a])};for(d.__woo=d.__woo||{},a=0;a<f.length;a++)d.__woo[f[a]]=d[f[a]]=d[f[a]]||new i;b=e.createElement(g),b.async=1,b.src=\\\"//static.woopra.com/js/w.js\\\",c=e.getElementsByTagName(g)[0],c.parentNode.insertBefore(b,c)}(\\\"woopra\\\");\\n \\n// configure tracker\\nwoopra.config({\\n domain: \\\"mybusiness.com\\\"\\n});\\n \\n// track pageview\\nwoopra.track();\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nBy placing this snippet on your website pages, you’ll instantly see Woopra displaying website activity into the platform. This is the essential first step to tracking and sets the foundation for future actions.\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** If you’re hosting your website on WordPress, you don’t need to install the Javascript snippet to track website activity. Simply, install the [Woopra WordPress integration](https://wordpress.org/plugins/woopra/) and the tracking code will automatically be added!\"\n}\n[/block]\n### Tracking Additional Pageview Actions\n\nMost of the activity on your site likely happens pre-sale. That’s when customers are exploring your site, looking through your products, and managing their carts. All of this activity needs to be tracked. Remember that along with the actions, you will also want to send properties, which are pieces of information that describe the event. Here are some of the key events and properties you should be sent outside of the basic pageviews.\n\n### Tracking Product Pageview Actions\n\nYou’ll want to track when website visitors are viewing specific products, product categories and product pages on your site. Along with the pageview actiion, we suggest tracking:\n\n- product_name\n- product_price\n- product_sku\n- product_category\n- product_url\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Keep in Mind:** This event should replace the default pageview action only for the product pages.\"\n}\n[/block]\nHere’s an example of the tracking code that you could customize to track product view actions:\n\n**Tracking Product Pageview Actions Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('view product', {\\n product_name: 'iPhone 7 Plus',\\n product_price: 799.99,\\n product_sku: 'A5343S',\\n product_category: 'Mobile devices & Accessories',\\n product_url: 'https://mystore.com/products/iphone-7-plus'\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Adding the Product URL to the product view event will generate a link to the product in the Woopra User Profile. This is an easy way to quickly reference the exact product a user was viewing.\"\n}\n[/block]\n### Tracking Product Video View Actions\n\nEach one of your products could have an associated video that dives deeper into the product that you’re selling. You should track when a user plays these videos to help identify the importance of content on conversions. The properties that you send along with this event might include:\n\n- product_name\n- product_price\n- product_sku\n- product_category\n- product_url\n- video_url\n\nWhen you customize the code, it should look similar to this:\n\n**Tracking Product Video View Events Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('view product video', {\\n product_name: 'iPhone 7 Plus',\\n product_price: 799.99,\\n product_sku: 'A5343S',\\n product_category: 'Mobile devices & Accessories',\\n product_url: 'https://mystore.com/products/iphone-7-plus',\\n video_url: 'https://mystore.com/products/iphone-7-plus#play-video-47'\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n###Tracking Blog Actions\n\nHow do you know what types of content perform better than others? Are users who read a blog post more likely to convert to paying customers?\n\nTrack your blog activity to measure blog attribution, inform future blog post topics and measure engagement. You can leverage this data in reporting and funnels to optimize engagement.\n\nFor example, the below ‘Blog Attribution’ funnel shows how many people read a blog post and then went on to take other actions on my website. You can see how many visitors read a post and subsequently subscribed, added an item to their cart, added a credit card and made a purchase.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/a1e190a-Blog-Journey-Ecommerce.png\",\n \"Blog-Journey-Ecommerce.png\",\n 1926,\n 684,\n \"#f7f9fd\"\n ]\n }\n ]\n}\n[/block]\nTo track your blog activity, provide the below example to your developer.\n\n**Blog Tracking Code Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"article view\\\", {\\n title: \\\"Blog post title\\\",\\n url: \\\"https://blog.companya.com/we-are-awesome\\\",\\n author: \\\"John Smith\\\",\\n category: \\\"News\\\",\\n published_on: 125234234234 // timestamp\\n})\\n \\n// You may track when users leave comments as well:\\nwoopra.track(\\\"article comment\\\", {\\n comment: \\\"Great article\\\"\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Check out [this article](http://www.marketingprofs.com/articles/2016/31239/how-to-use-customer-insight-to-create-better-content?adref=nlt120816&utm_content=45777337&utm_medium=social&utm_source=twitter) to learn how to leverage customer insight to fuel content decisions!\"\n}\n[/block]\n### Tracking Contact Forms\n\nIt’s important to track when users identify themselves and engage with other content on your site. For eCommerce, this might include Contact Forms that are for:\n\n- Providing Feedback\n- Submitting a Complaint\n- Order Status Inquiry\nand so on!\n\nFor a customer success teams, this information can help you measure the effectiveness of your efforts and allow you to optimize areas for improvement. You can also tie these efforts directly back to ROI by measuring how many users submit support inquiries or provide feedback and make (or don’t make) a purchase.\n\nTo track contact form submissions, ask your developer to customize the below code snippet for each of your contact forms:\n\n**Tracking a Feedback Contact Form Example:**\n\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.identify({\\n name: \\\"Name of user\\\",\\n email: \\\"[email protected]\\\",\\n phone: \\\"user phone number\\\"\\n});\\nwoopra.track(\\\"feedback form\\\", {\\n subject: \\\"Support XYZ Feedback\\\",\\n message: \\\"I really loved your live chat support. Would like it if you were online at \\n nights as well!\\\"\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nOnce setup, the information will display on the user’s Woopra Profile and you can begin to segment, build customer journeys and leverage the data in your reporting!\n\n### Tracking Website Video Play Actions\n\nIf you have a promo video on your homepage or additional landing pages throughout your site, you’ll want to track when users play your video content. This is separate from product video views as they do not directly relate to a specific product that you’re merchandising. Customize the below tracking snippet to begin sending and measuring video engagement data in Woopra:\n\n**Tracking Website Video View Events Code Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"play video\\\", {\\n title: \\\"Title of the video\\\",\\n videoId: \\\"1SF3sx\\\",\\n url: \\\"https://companya.com/promo/\\\"\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Using Google Tag Manager? Here’s a [cool tutorial for tracking YouTube videos in Woopra](http://moometric.com/integrations/woopra/track-youtube-video-views-in-woopra-using-gtm/) using GTM!\"\n}\n[/block]\n### Tracking Add to Cart Actions\n\nIt’s great to track when users add an item to their shopping cart. Be sure to send the associated properties along with this event for greater depth and analysis. For example, if you send the “product SKU” along with the “Add to Cart” event, you could trigger an email campaign to everyone who added that specific item to their cart (rather than a generic category!) This allows for greater personalization and incredibly powerful insights across your Woopra reporting.\n\nThe properties you could send along with the “Add to Cart” action could include:\n\n- product_name\n- product_price\n- product_sku\n- product_category\n- product_url\n- quantity (if the user is removing an item from the cart, the quantity will be negative)\n\nAfter deciding which properties to send along with the “Add to Cart” action, your code could look like this:\n\n**Tracking Add to Cart Action Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('add to cart', {\\n product_name: 'iPhone 7 Plus',\\n product_price: 799.99,\\n product_sku: 'A5343S',\\n product_category: 'Mobile devices & Accessories',\\n product_url: 'https://mystore.com/products/iphone-7-plus'\\n quantity: 1\\n});\",\n \"language\": \"text\"\n }\n ]\n}\n[/block]\nTracking Shipping Estimate Actions\n\nAfter customers add items to their cart, you’ll probably want to provide them with an estimate of their shipping costs. This is a good event to track as well because you’ll be able to learn if the shipping price shown to a potential customer impacts their conversion rate.\n\nProperties to send along with the Shipping Estimate Action include:\n\n- zipcode\n- shipping_price\n\nYour code snippet will look similar to below:\n\n**Tracking Shipping Estimate Actions Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('estimate shipping', {\\n zipcode: 94104,\\n shipping_price: 12.95\\n});\",\n \"language\": \"text\"\n }\n ]\n}\n[/block]\n###Tracking Read Product Review Actions\n\nIf customers leave reviews for the products that you’re selling, it’s helpful to know who reads the reviews. This will allow you to measure if the product reviews negatively or positively impact conversion rates. Some important properties to track along with this event include the:\n\n- product_name\n- product_sku\n- product_price\n- product_category\n- product_url\n- product_category\n\nYou also could track:\n\n- total_reviews\n – This is useful because you’ll be able to understand if people are seeing enough reviews for the product they wish to purchase.\n- rating\n– This is also helpful to show conversions based on product rating, one of the driving forces that influence customer purchases.\n\nHere’s an example of what your custom code snippet could look like when including the above properties:\n\n**Tracking Read Product Review Actions Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('read product reviews', {\\n product_name: 'iPhone 7 Plus',\\n product_price: 799.99,\\n product_sku: 'A5343S',\\n product_category: 'Mobile devices & Accessories',\\n product_url: 'https://mystore.com/products/iphone-7-plus',\\n total_reviews: 412,\\n rating: 4.9\\n});\",\n \"language\": \"text\"\n }\n ]\n}\n[/block]\n### Tracking Product Review Submission Actions\n\nOnline reviews are essential. [92 percent of consumers](https://www.vendasta.com/blog/50-stats-you-need-to-know-about-online-reviews) now rely on product reviews to help inform purchasing decisions. If you offer reviews on your products, you’ll want to track when customers submit reviews to analyze how they impact product purchases. Properties to send along with your “Tracking Product Review Submission Action” include:\n\n- product_name\n- product_sku\n- product_price\n- product_category\n- product_url\n- product_category\n- review_number\n- review_url\n- review_rating\n\nOnce you’ve decided which properties matter most to you, customize the code snippet like the example below:\n\n**Tracking Product Review Submissions Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('submit product review', {\\n product_name: 'iPhone 7 Plus',\\n product_price: 799.99,\\n product_sku: 'A5343S',\\n product_url: 'https://mystore.com/products/iphone-7-plus',\\n product_category: 'Mobile devices & Accessories',\\n review_url: 'https://mystore.com/products/iphone-7-plus/reviews/412',\\n review_number: 413,\\n review_rating: 5\\n});\",\n \"language\": \"text\"\n }\n ]\n}\n[/block]\n### Tracking Campaigns with UTM Tags\n\nIf you spend a significant amount of time posting to social media, running AdWords campaigns or sharing content – you’re driving traffic from hundreds of different URLs a day. But, how do you know which social media posts drove the most traffic? Can you quickly see which campaigns drove the most conversions over time?\n\nUsing UTM parameters, you can compare the performance of campaigns from different mediums and channels and measure over time.\n\nA UTM tag will answer questions such as:\n\n- Where are my visitors are coming from?\n- How are they finding me?\n- What happens after they engage with my campaign?\n\nOnce you have the basic Woopra Javascript tracking snippet installed on your website, Woopra will automatically begin tracking utm_tags for you. You can then set up Journeys and Trends reports to monitor and measure campaign effectiveness by campaign name, source, content, etc.\n\nFor example, the below Journey report shows me how many users came to Woopra through a campaign, sorted by campaign name and the actions they took after.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/277cb8e-Campaign-Conversions-ecommerce.png\",\n \"Campaign-Conversions-ecommerce.png\",\n 2278,\n 1358,\n \"#fafbfd\"\n ]\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Learn more about [UTM parameters and how to leverage them in Woopra!](https://blog.woopra.com/what-are-utm-parameters-and-how-should-you-use-them-e2257fd0a201)\"\n}\n[/block]\n### Tracking Product Search Actions\n\nUsers searching on your website can offer insight into popular products, product categories and frequently asked questions. Leveraging this data will allow you to personalize their experience and provide the most relevant experience possible. Customize the below tracking snippet to send product search events from your website to Woopra.\n\nInclude properties such as:\n\n- keyword\n- total_results\n\nThe total number of results found is important because you’ll want to analyze what people are searching for. This allows you to find gaps between product offerings and understand if visitors are unable to find products they’d like to purchase.\n\n**Tracking Product Search Actions Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('product search', {\\n keyword: 'iphone',\\n total_results: 12\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Including the number of search results will allow you to segment searches where users didn’t find any results. This tells you where there might be gaps in your content. It’s also an opportunity to reach out directly and provide an answer or automate an email campaign to provide additional assistance.\"\n}\n[/block]\n### Tracking Live Chat Actions\n\nOne of your main objectives is to get the user to identify themselves on your marketing website. A common strategy is to provide a frictionless, live chat feature.\n\nIf you’re using one of [Woopra’s Integrations partners](https://www.woopra.com/appconnect/) for chat, simply navigate to Integrations in your Woopra instance and install the integration. If not, see the below code snippet as an example of how to track live chat actions.\n\n**Tracking Live Chat Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.identify({\\n name: \\\"Name of User\\\",\\n email: \\\"[email protected]\\\",\\n phone: \\\"user phone number\\\"\\n});\\n \\nwoopra.track(\\\"start_chat\\\");\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nOnce you begin tracking this data, it will automatically populate in the user’s profile in Woopra. You can then begin to measure the impact that chat has on driving conversions and overall customer success.\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Read [“How to Generate Leads with Data and Live Chat”](https://blog.woopra.com/how-to-generate-leads-with-data-and-live-chat-e8a43164ae5a) for additional guidance and tips!\"\n}\n[/block]\n### Tracking Signup Actions\n\nEvery eCommerce company should track customer and user signups. They’re a crucial indicator of traction and allow you to nurture customer relationships over time. For example, you should measure how many people signup to make a purchase on your website vs. how many continue to checkout as a guest. Properties that you can send along with a signup event might include:\n\n- Email address\n- Name\n- Username\n- Shipping Address\n\nAs well as any other fields relevant to your business that you’re collecting during signup. For example, a clothing store might also want to include a user’s size details and any personal preferences.\n\nThe most important property to send with the signup action is the user’s email address. This is what allows you to identify the visitor and [track them across multiple devices](https://www.woopra.com/user-tracking/) (e.g. laptop, iPhone, work computer, etc).\n\nTo track these signup actions, you can define the action name string and the properties associated with that action object, as shown below.\n\n**Tracking Signup Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track(\\\"signup\\\", {\\n name: “John Doe”,\\n username: \\\"johndoe\\\",\\n email: “[email protected]”,\\n address: \\\"XYZ Avenue\\\"\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nThe code above will track a custom action titled “signup” with the additional information of the account created.\n\nPassing these events into Woopra will automatically show the information being sent in real-time on the user profiles and you can start to run custom reporting and funnels. For example, you could measure the number of signups by location to understand if your brand is gaining more traction in one area of the world than another.\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Actions and properties should always be lowercase!\"\n}\n[/block]\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/a99d4da-Campaign-Conversions-countries.png\",\n \"Campaign-Conversions-countries.png\",\n 2278,\n 1372,\n \"#fafbfd\"\n ]\n }\n ]\n}\n[/block]\n### Tracking Logon Actions\n\nHow often do users login to your application? Who is logging on and what actions do they take next? Tracking login actions will answer these questions and help you understand how often successful users login, the authentication methods used and more!\n\nHaving this data gives you the ability to calculate conversions and identify your most engaged customers! Work with your developer to have logon events sent to Woopra.\n\nHere’s an example of what the code will look like:\n\n**Tracking Logon Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\n// Send at least the email address to Woopra in case the user is logging\\n// in from a different device. Woopra prefers \\\"emails\\\" over \\\"cookies\\\".\\nwoopra.identify({\\n email: \\\"[email protected]\\\"\\n})\\nwoopra.track(\\\"login\\\");\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Profile Update Actions\n\nWhen a user updates their profile information on your website, you’ll want to track this information in Woopra. Send it as a ‘profile update’ event, and include any of the fields that are relevant to your user profiles. This could include when they update their preferred type of payment, mailing address, email and so on! See the below example for reference.\n\n**Tracking Profile Update Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.identify({\\n fname: \\\"First name\\\",\\n lname: \\\"Last name\\\",\\n});\\n \\nwoopra.track(\\\"profile update\\\");\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Add Payment Method Actions\n\nSee how many visitors add a payment method before checkout by tracking the “Add Payment Method” event. Be sure to include the “type” as a property to understand which payment methods are the most popular!\n\n**Tracking Add Payment Method Actions Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('add payment method', {\\n type: 'Visa'\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Discount/Promo Actions\n\nUnderstand which promotions are used the most frequently to optimize promotional campaigns and measure their success! Include the below properties with your event:\n\n- coupon_code\n- valid (true or false)\n\n**Tracking Discount/Promo Actions Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('apply coupon', {\\n coupon_code: 'SUMMER16',\\n valid: true\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nSending properties with your events is extremely important because it gives you a lot more capability to analyze your data in different ways and ultimately answer more complex questions.\n\n### Tracking Checkout Actions\n\nIt’s essential to track when customers checkout. You can leverage this data throughout Woopra in your reporting to measure and monitor success! Whenever a user checks out, you’ll want to send properties such as payment amount and what product the payment was for. Properties to include along with this event include:\n\n- total_items\n- discount_amount\n- tax_amount\n- shipping_amount\n- total_amount\n- order_id\n\n**Tracking Checkout Actions Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('checkout', {\\n total_items: 3,\\n discount_amount: 0,\\n tax_amount: 154.23,\\n shipping_amount: 12.95,\\n total_amount: 1430.43,\\n order_id: '22bksmkdz4m9ds'\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Item Checkout Actions\n\nWhen tracking customer checkouts, you should also track the itemized checkout to understand the actual sales for every product. For example, if the checkout includes one iPhone and two iPhone cases, you’ll want to track each of those items separately so that you can study sales by product item and category.\n\nInclude event properties such as:\n\n- product_name\n- product_price\n- product_sku\n- product_category\n- product_url\n- quantity\n\n**Tracking Item Checkout Actions Code Example**\n\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('item checkout', {\\n product_name: 'iPhone 7 Plus',\\n product_price: 799.99,\\n product_sku: 'A5343S',\\n product_url: 'https://mystore.com/products/iphone-7-plus',\\n product_category: 'Mobile devices & Accessories', \\n quantity: 1 \\n});\\n \\nwoopra.track('item checkout', {\\n product_name: 'iPhone 7 Plus Case',\\n product_price: 49.95,\\n product_sku: 'B4723CV',\\n product_url: 'https://mystore.com/products/iphone-7-plus-case',\\n product_category: 'Mobile devices & Accessories',\\n quantity: 2\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Use Stripe for payment processing? Even better! We’ve built a custom integration with Stripe to make payment tracking seamless. Simply install the integration and let Woopra do the work!\"\n}\n[/block]\n### Tracking Subscription Actions\n\nMany eCommerce companies now offer subscriptions for their products. Think of companies like DailyLook, TruBrain and Stich Fix. If you’re an eCommerce company with a subscription model, it’s important to measure new subscriptions, it’s equally important to measure subscription changes over time to keep a pulse on the health of your customer base.\n\nYou can drill down based on any available metrics such as geolocation, campaigns, lead sources, platforms, and more! Tracking subscription actions in Woopra will allow you to answer essential questions such as:\n\n- What are my highest and lowest performing customer segments?\n- At what point are customers likely to churn?\n- How often do people engage with my product (or take any action) after becoming a customer?\n\nEvery time a customer subscription is created, modified, or canceled, you can send an action called “subscription update” to Woopra with the following properties:\n\n- **old acv:** The previous ACV value of the subscription.\n- **new acv:** The new ACV value of the subscription.\n- **delta:** The difference between previous ACV and new ACV.\n\nFor example, let’s say a customer upgrades from a $99/month (ACV $1,188) package to a $199/month (ACV $2,388) package. The resulting increase in your ARR (Annual Recurring Revenue) is your ACV delta, which is $1,200 in this example.\n\nTo begin tracking subscription actions, follow the same steps to defining your action name string and the properties associated with the action object. Adding the above-mentioned properties, your javascript string will look like this:\n\n**Tracking Subscription Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"subscription update\\\", {\\n \\\"old acv\\\": 1188.0,\\n \\\"new acv\\\": 2388.0,\\n \\\"delta\\\": 1200.0,\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n- If the customer is creating the subscription for the first time, the old ACV is 0\n- If the customer is downgrading the subscription, the old ACV is higher than new ACV and the delta is negative\n- If the customer is canceling their subscription, the new ACV is 0 and the delta is negative\n\nOnce you begin sending subscription actions to Woopra, navigate to your schema setup and customize the property types, key, aggregation and description. This will allow you to personalize how these events are displayed and seamlessly leverage the data across Woopra.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/2fbf28d-Schema-Subscription-Update.png\",\n \"Schema-Subscription-Update.png\",\n 2424,\n 1176,\n \"#f8f7fa\"\n ]\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** To learn more about measuring subscription changes in Woopra, check out [this blog post!](https://blog.woopra.com/how-to-measure-subscriptions-churn-with-woopra-6060d61e4e9d) Or, for a deep dive into the Woopra schema setup and different ways it can be customized, [read this post!](https://blog.woopra.com/why-we-built-a-customizable-woopra-schema-96952f4e87)\"\n}\n[/block]\n##Other Important eCommerce Actions to Track\n\n### Tracking Error and Issue Actions\n\nWhether we like it or not, issues and problems occur! Be prepared by tracking the errors that users experience. This will help you build a better product and will arm your customer success team with data to help them provide better service and support. For example, if a user receives a form error, you could submit the action below:\n\n**Tracking Error Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"form error\\\", {\\n form: \\\"signup form\\\",\\n error: \\\"Email already registered\\\"\\n});\\n \\nwoopra.track(\\\"form error\\\", {\\n form: \\\"login form\\\",\\n error: \\\"Wrong username or password\\\"\\n});\\n \\nwoopra.track(\\\"app error\\\", {\\n app_version: \\\"1.2\\\",\\n error_code: 500,\\n error: \\\"Failed to download resource A\\\"\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Server Side Actions\n\nServer side events can be useful especially when those events are performed on behalf of the user. Here are some events that you should consider tracking:\n\n### Tracking Order Shipped Actions\n\nIt’s important to track when a customers order has successfully shipped! You can leverage this data to automate email campaigns when the item has arrived and to assist customers experiencing issues. Include properties such as:\n\n- order_id\n- shipping_method\n- days (days until delivered)\n\n**Tracking Order Shipped Actions Code Example**\n\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('product shipped', {\\n order_id: '22bksmkdz4m9ds',\\n shipping_method: 'FedEx',\\n days: 5\\n})\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Refund Actions\n\nEqually important as when an item ships is tracking when an item is refunded, returned or exchanged. Be sure to include the “amount” as a property in this event such as below:\n\n- amount\n\n**Tracking Refund Actions Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('issue refund', {\\n amount: 344.95\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Email Actions\n\nIt’s important for marketers, sales and customer support teams to track when users open, receive and click on emails. Woopra integrates with most of the popular email marketing platforms to make email tracking a breeze. Track email events and update lead lists automatically!\n\nFor example, the [Marketo app](https://www.woopra.com/appconnect/marketo) will track Marketo actions such as an email is sent, or when a user opens and clicks on it. These actions are tracked, sent to Woopra, and included in the Woopra Profile.\n\nIn addition, you’ll have [Trends Reports](doc:trends) reflecting these events. For example, you may want to analyze which emails had the most opens among customers in California. Or, you may want to build a [Journey Report] report showing where people drop off on the path to conversion after they come from an email campaign – and ultimately what impact their email marketing is having on conversion.\n\nYou can also set up [automations](https://docs.woopra.com/docs/triggers) to automatically send new leads to your email marketing software or update existing lead records. For example, if someone signs up on your website, you can set up a Trigger to automatically send the lead’s information to Hubspot and a new Hubspot Lead will be created. If they change their company information, later on, those fields will be updated in their Hubspot Lead record.\n\nWant to use all this data in Woopra to update your email marketing lists based on user behavior? This functionality is also built into our integrations. For example, you could update your MailChimp List for “Ready to Buy” users whenever a user adds an item to their cart, enters their shipping information and adds a credit card to their profile!\n\nPick your email platform below to learn more about each integration:\n\n- [Marketo](https://www.woopra.com/appconnect/marketo)\n- [Hubspot](https://www.woopra.com/appconnect/hubspot)\n- [MailChimp](https://www.woopra.com/appconnect/mailchimp)\n- [SendGrid](https://www.woopra.com/appconnect/sendgrid)\n- [Eloqua](https://www.woopra.com/appconnect/eloqua)\n- [Mandrill](https://www.woopra.com/appconnect/mandrill)\n- [Campaign Monitor](https://www.woopra.com/appconnect/campaignmonitor)\n- [Customer.io](https://www.woopra.com/appconnect/customerio)\n- [Mailgun](https://www.woopra.com/appconnect/mailgun)\n\n\n### Tracking Support Ticket Actions\n\nAre users who submit support requests more or less likely to convert? What impact do certain product features have on support tickets? Do well-answered support tickets drive conversions? Find all of this out and more by integrating with one of our customer support tools!\n\nWoopra integrates with Zendesk, Freshdesk and a few others. Track when users submit tickets and track when they get resolved. This is helpful to study the attribution of your customer success team to the retention of your customers.\n\nPick your support tool below to learn more:\n\n- [Zendesk](https://www.woopra.com/appconnect/zendesk)\n- [Freshdesk](https://www.woopra.com/appconnect/freshdesk) \n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** [Learn how User Data Leads to Better Customer Service!](https://www.livechatinc.com/blog/how-user-data-leads-to-better-customer-service/)\"\n}\n[/block]\n### Tracking NPS Score Actions\n\nAre you collecting valuable NPS data from your customers? Track this data in Woopra to build audiences of promoters and detractors. Integrating with [Delighted](https://www.woopra.com/appconnect/delighted) will allow you to automatically see NPS survey results on profiles on Woopra. You can trigger personalized emails to re-engage detractors or send a special offer to your promoters!\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Check out [this post](https://blog.woopra.com/new-in-appconnect-bellgram-and-delighted-75788e41083f) for more tips on leveraging NPS data in Woopra!\"\n}\n[/block]\n### Tracking Phone Call Actions\n\nHow do phone calls impact revenue? How many customers make a call to your team prior to purchasing? Are certain support team members better at handling customer calls than others? Find all of this out, and more, by leveraging phone call data in Woopra! Woopra integrates with [Bellgram](https://www.woopra.com/appconnect/bellgram) and [Ringostat](https://www.woopra.com/appconnect/ringostat) to seamlessly track phone call events.\n\nThese events will attach to your Woopra profiles so that you can instantly see if a customer has tried to reach you via phone, who they spoke to, any notes regarding the call and more!\n\nLeveraging Woopra’s segmentation capabilities, you can build Journeys and Trends Reports to determine if phone calls impact a user’s likelihood to purchase or churn. Further drilling down to the representative level, allows you to identify employees that are successfully handling support or sales calls and who could use some help!","excerpt":"The Ultimate Action Tracking Setup Guide: eCommerce Edition","slug":"ecommerce-tracking","type":"basic","title":"eCommerce Tracking","__v":0,"parentDoc":"5b15a4ac34eb070003426a6d","updatedAt":"2020-10-23T03:12:45.726Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false},{"_id":"5cf99eec086c4401e48dde37","version":"5b070ce4060bee00035d8d12","updatedAt":"2020-08-30T16:24:30.689Z","createdAt":"2019-06-06T23:17:00.140Z","project":"58b721a1f22b830f009a0bcd","category":"5d0157e5dba6ec001c22b539","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":1,"body":"##Important Metrics and KPIs\nIn eCommerce, increasing sales is among the top KPIs for your business, obviously. But what goes into sales numbers and how can we increase conversions? What metrics should we be looking at and what reports will help us achieve that goal? Let's take a look at some useful reports we can build in Woopra that can give us insight on what drives sales and how we make better data driven decisions.\n\n##Tracking the Conversion Journey\nTypically for e-com, users will go through a process of coming to your site, viewing products, adding them to a cart, and then checking out. Simple enough, but there is a lot that can go into this process and there's a lot of data we can extract. \n\nOne thing we can do to find out more is to build out a Journey report to get data on this process. Let's take a look at an example of how we can build this. Say we have an e-com site that sells electronics. \n\nLet's take a look at this example Journey and how we went about building it:\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/4dc5a37-Image_2019-06-14_at_3.37.10_PM.png\",\n \"Image 2019-06-14 at 3.37.10 PM.png\",\n 1938,\n 704,\n \"#f2eef3\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n**Step 1** - Add a page view for our landing page. This will get all the users who came to our site.\n\n**Step 2** - Focus on a specific category like TVs, computers, or cell phones. We could also break this down into different parallel steps if we wanted to list out each category. We can filter on the Pageview event and configure it where the uri contains /tvs.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/b3f695e-Image_2019-06-11_at_2.20.29_PM.png\",\n \"Image 2019-06-11 at 2.20.29 PM.png\",\n 1478,\n 1098,\n \"#edeff9\"\n ]\n }\n ]\n}\n[/block]\n**Step 3** - Filter on the most popular products. We can create the next step in a similar way, but this time we'll use a dynamic step. I'll select the pageview event again, change this to a dynamic step, and breakdown the report by 'title'. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/d05e7e0-Image_2019-06-14_at_3.40.48_PM.png\",\n \"Image 2019-06-14 at 3.40.48 PM.png\",\n 1214,\n 1110,\n \"#edeff6\"\n ]\n }\n ]\n}\n[/block]\n**Step 4** - Select your cart actions that you are tracking. We'll create a flow of the various cart actions that include, 'cart created', 'cart updated' (optional step if they update or add more items), and 'paid order' all in different steps.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/8873942-Image_2019-06-14_at_3.44.22_PM.png\",\n \"Image 2019-06-14 at 3.44.22 PM.png\",\n 1228,\n 1026,\n \"#ebf1f8\"\n ]\n }\n ]\n}\n[/block]\nWhen we run this report we can see a complete Journey of the purchasing process broken down by a cohort of days.\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/821bf48-Image_2019-06-14_at_3.45.11_PM.png\",\n \"Image 2019-06-14 at 3.45.11 PM.png\",\n 3126,\n 2530,\n \"#f8f5f7\"\n ]\n }\n ]\n}\n[/block]\n###What insights can we gather from this report?\n####Re-engagement \nNow that we have this data, we can see how many sales we're making, what our conversion rates look like, and which products are performing the best. We can even drill down into the dropped list on the second to last step to download a list of the users who didn't make a purchase. This could be really useful to your marketing department if they wanted to reengage these users by sending them some promo code. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/90cf6a9-Image_2019-06-14_at_3.49.04_PM.png\",\n \"Image 2019-06-14 at 3.49.04 PM.png\",\n 2628,\n 714,\n \"#f4f1f5\"\n ]\n }\n ]\n}\n[/block]\n####Triggers and Automation\nAdditionally, if you have one of our mail integrations like [MailChimp](doc:mailchimp), we could even set up [Triggers](doc:triggers) ] to add users to lists when they perform specific actions. For example, we could use triggers to add users to a specific list if they viewed a specific item. \n\n####Improving Funnel Conversions\nFrom this report, we can also learn which products are our top performing. We could even make additional Journey reports focusing on specific products or categories to get a more micro view on the Journey. This can bring some useful insight to help drive sales. If we know what our top performing products are, we could change our marketing and website to highlight these items and drive more sales.\n \n##Tracking Subscriptions and Churn\nOften, e-com companies might have a subscription model for certain products or some kind of discount club. Using a [Cohort](doc:cohort) report, we can monitor the health of our subscriptions and churn. \n**Step 1** - Select your timeframe and initial action such as a subscription signup event. You can add constraints as well if you want to focus in on a specific subscription tier or plan as well.\n\n**Step 2** - Select your repeat action which is the subscription pay event. \n\n**Step 3** - Select your metric. We can count visitors to see the number of subscribers.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/1dbb93f-Image_2019-06-11_at_3.02.42_PM.png\",\n \"Image 2019-06-11 at 3.02.42 PM.png\",\n 1218,\n 942,\n \"#f8f5f6\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n###What insights can we gather from this report?\n####Churn Monitoring and Benchmarking\nNow that we have this data, we can look at the report below and this will give us a clear view of churn and renewed subscriptions. \n\nWe can see how many subscriptions are created each month, and how many continue to renew their subscriptions. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/0e25a10-Image_2019-06-11_at_3.04.03_PM.png\",\n \"Image 2019-06-11 at 3.04.03 PM.png\",\n 3492,\n 2762,\n \"#f8f8f9\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n###Sales and Subscriptions Ammounts\nWith a simple change to our configuration We can change this report to show total sales numbers and ammounts.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/f5561ed-Image_2019-06-12_at_11.56.33_AM.png\",\n \"Image 2019-06-12 at 11.56.33 AM.png\",\n 528,\n 102,\n \"#f4f2f3\"\n ],\n \"caption\": \"When we change the metric to 'sum of total', we can see a revenue and subscription report with total amounts.\"\n }\n ]\n}\n[/block]\n##Campaign Tracking Journey\nAnother important aspect to conversions and sales is to find out which campaigns are working the best. For this, we highly advise the use of [UTM tags](doc:campaign-tracking) for any incoming links.\n\nWoopra will automatically track this data so you can build out reports based on specific campaigns. We can create a Journey report to see which ones are performing the best. \n\n**Step 1** - Add parallel steps where the action is the Page View event. Each parallel step will filter on the specific campaign name. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/f81c466-Image_2019-06-11_at_3.31.20_PM.png\",\n \"Image 2019-06-11 at 3.31.20 PM.png\",\n 1404,\n 1082,\n \"#eceef8\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n**Step 2** - The next step will simply be the checkout event. Once we run the report, we can easily see which campaigns are driving the most conversions.\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/b9c4ddb-Image_2019-06-11_at_3.33.33_PM.png\",\n \"Image 2019-06-11 at 3.33.33 PM.png\",\n 2938,\n 2012,\n \"#f6f2f9\"\n ]\n }\n ]\n}\n[/block]\n###What insights can we gather from this report?\n####Best Marketing Channels \nThis report will show us the overall number of people that are coming to your site and then buying a product. We can use this info to help us determine which marketing avenues are working the best so we can spend more on those campaigns to drive more traffic and sales. \n\n#Facebook/Adwords Order Tracking Trends\nWe can dive even deeper and find out how specific campaigns are doing. We can even attribute each order with a campaign if we are using UTM tags and campaign tracking. \n\n**Step 1** - In our Trend Report, we'll first filter on a specific segment of users. We want to see only users where their 'first campaign source' contains 'facebook' and 'facebookads'. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/176c79c-Image_2019-06-12_at_3.16.40_PM.png\",\n \"Image 2019-06-12 at 3.16.40 PM.png\",\n 1024,\n 506,\n \"#dce1f5\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n **Step 2** - Next we'll select our action which is our Checkout event.\n\n **Step 3** - Lastly, we'll select what we want to compare by. Here we have order_id, email, first campaign source, and the total.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/5bfb010-Image_2019-06-12_at_3.17.00_PM.png\",\n \"Image 2019-06-12 at 3.17.00 PM.png\",\n 2516,\n 2480,\n \"#f7f5f8\"\n ]\n }\n ]\n}\n[/block]\n###What insights can we gather from this report?\n####Campaign Performance \nHere we have really useful information on how our Facebook ads are doing. We can create similar reports for other campaign sources as well, then we can see which orders are attributed to which campaigns. Again, if we're in marketing, this is super valuable info. We can clearly see who is ordering what, and which Facebook campaign drove the most sales. \n\n\n##Order Lists and Reports\nLastly, we can build out a report to see all the recent orders.\n\n**Step 1** - First we'll select our timeframe and action. We want a list of recent orders so we'll use our 'product purchased' event.\n\n**Step 2** - Next we'll add the relevant columns. We can use timestamp(by default), email, name, product_name, product_qty, and product_price.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/5693496-Image_2019-06-12_at_3.30.22_PM.png\",\n \"Image 2019-06-12 at 3.30.22 PM.png\",\n 2476,\n 612,\n \"#f7e8f2\"\n ]\n }\n ]\n}\n[/block]\n###What insights can we gather from this report?\n####See All Your Orders\nThis report is great for a straight list of orders and who made them. If we export this list, we can find out which products are selling the most. This can give us a general overview of popular products so we can focus on supply and demand changes. We could even use this list to email users that purchased a certain product and ask for reviews or product feedback. \n\n##Expore Your Data\nI hope these examples give you some ideas about the reports you can build and the types of questions you can answer. We encourage you to explore your data and experiment with the different reports because you never know what important trends or metrics you might uncover.","excerpt":"","slug":"ecommerce-report-examples","type":"basic","title":"eCommerce Report Examples","__v":0,"parentDoc":"5b15a4ac34eb070003426a6d","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false},{"_id":"5b15bb4ff68d3a0003009dbe","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5d0157e5dba6ec001c22b539","parentDoc":"5b15a4ac34eb070003426a6d","user":"5adfa297452bd900036d0f67","updates":["5c3fb9ee698b9a0050a6e2fd"],"next":{"pages":[],"description":""},"createdAt":"2018-06-04T22:21:03.130Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":2,"body":"[block:embed]\n{\n \"html\": \"<iframe class=\\\"embedly-embed\\\" src=\\\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FwkfXDpQEmqo%3Ffeature%3Doembed&url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DwkfXDpQEmqo&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FwkfXDpQEmqo%2Fhqdefault.jpg&key=f2aa6fc3595946d0afc3d76cbbd25dc3&type=text%2Fhtml&schema=youtube\\\" width=\\\"854\\\" height=\\\"480\\\" scrolling=\\\"no\\\" frameborder=\\\"0\\\" allow=\\\"autoplay; fullscreen\\\" allowfullscreen=\\\"true\\\"></iframe>\",\n \"url\": \"https://www.youtube.com/watch?v=wkfXDpQEmqo\",\n \"title\": \"SaaS Tracking Guide - Part 1 of 2\",\n \"favicon\": \"https://s.ytimg.com/yts/img/favicon-vfl8qSV2F.ico\",\n \"image\": \"https://i.ytimg.com/vi/wkfXDpQEmqo/hqdefault.jpg\"\n}\n[/block]\n## The Ultimate Action Tracking Setup Guide: SaaS Edition\n\nWe wrote a post featuring Best Practices for Custom Event Collection to help new Woopra users get started with the fundamentals of tracking their customer data.\n\nWhile this was an excellent place to kick-off, it’s important to remember that every industry and vertical is unique. For example, an eCommerce company will want to track different actions than a Mobile Gaming or Travel company, and so on. To help guide you through this process, we’ve gone a step further and put together tips and best practices by industry. So, without further ado, here is: **The Ultimate Tracking Setup Guide: SaaS Edition.**\n\n## Identifying Key Customer Lifecycle Moments for SaaS\n\nThree years ago, [Forrester reported](https://www.forrester.com/report/Back+Up+Your+Critical+Cloud+Data+Before+Its+Too+Late/-/E-RES107761) that by 2016, the average company would be using 66 different SaaS applications! Each of these applications, from your marketing automation software to your CRM, houses unique engagements and actions taken by users. When pieced together, they reveal the total customer experience and enable you to optimize and engage with customers like never before.\n\nWhile all organizations are different, nearly all SaaS companies are heavily reliant on key moments in the customer lifecycle that fuel their success and growth. These include marketing website actions, signups, subscriptions, free trials, onboarding, usage, retention and upsells. In this guide, we’ll walk through how to track and measure each of these moments in Woopra.\n\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"Keep in mind that the help of a developer will be required to code the custom actions you’d like to track. But, by using this guide, you’ll be able to outline the key actions first to **significantly cut down on implementation and development time!**\"\n}\n[/block]\n## Tracking Marketing Website Actions\n\n### Tracking Anonymous Website Traffic\n\nWoopra is designed to track unique, unidentified website and mobile app users from their first touch. The user is assigned a unique ID and all of their anonymous activity is tracked in the customer profile. You’ll also have data regarding the user’s location, system, platform, referrer (if applicable) and more!\n\nOnce the user is identified – through signing up, subscribing, or a similar activity – all previous anonymous activity will be merged into the same [Profile](https://docs.woopra.com/docs/profiles). This provides a complete picture of the full lifecycle for every user, starting with the first touch.\n\nTo start tracking anonymous website traffic:\n\n- Customize the domain name in the snippet below.\n- Copy and paste the Woopra [Javascript tracking code](https://docs.woopra.com/reference#intro-javscript-sdk) into the head section of your website pages.\n- Ensure the code is pasted into every page of your site that you’d like to track.\n\n**Woopra Javascript Tracking Code**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\n!function(){var a,b,c,d=window,e=document,f=arguments,g=\\\"script\\\",h=[\\\"config\\\",\\\"track\\\",\\\"trackForm\\\",\\\"trackClick\\\",\\\"identify\\\",\\\"visit\\\",\\\"push\\\",\\\"call\\\"],i=function(){var a,b=this,c=function(a){b[a]=function(){return b._e.push([a].concat(Array.prototype.slice.call(arguments,0))),b}};for(b._e=[],a=0;a<h.length;a++)c(h[a])};for(d.__woo=d.__woo||{},a=0;a<f.length;a++)d.__woo[f[a]]=d[f[a]]=d[f[a]]||new i;b=e.createElement(g),b.async=1,b.src=\\\"//static.woopra.com/js/w.js\\\",c=e.getElementsByTagName(g)[0],c.parentNode.insertBefore(b,c)}(\\\"woopra\\\");\\n \\n// configure tracker\\nwoopra.config({\\n domain: \\\"mybusiness.com\\\"\\n});\\n \\n// track pageview\\nwoopra.track();\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nBy placing this snippet on your website pages, you’ll instantly see Woopra displaying website activity into the platform. This is the essential first step to tracking and sets the foundation for future actions.\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** If you’re hosting your website on WordPress, you don’t need to install the Javascript snippet to track website activity. Simply, install the [Woopra WordPress integration](https://wordpress.org/plugins/woopra/) and the tracking code will automatically be added!\"\n}\n[/block]\n### Tracking Blog Actions\n\nHow do you know what types of content perform better than others? Are users who read a blog post more likely to convert to paying customers?\n\nTrack your blog activity to measure blog attribution, inform future blog post topics and measure engagement. You can leverage this data in reporting and funnels to optimize engagement.\n\nFor example, the below ‘Blog Attribution’ Customer Journey shows how many people read a blog post and then went on to take other actions in my product and on my website.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/0097f1f-Journey-Blog.png\",\n \"Journey-Blog.png\",\n 1865,\n 680,\n \"#f7f9fd\"\n ]\n }\n ]\n}\n[/block]\nTo track your blog activity, provide the below example to your developer.\n\n**Blog Tracking Code Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"article view\\\", {\\n title: \\\"Blog post title\\\",\\n url: \\\"https://blog.companya.com/we-are-awesome\\\",\\n author: \\\"John Smith\\\",\\n category: \\\"News\\\",\\n published_on: 125234234234 // timestamp\\n})\\n \\n// You may track when users leave comments as well:\\nwoopra.track(\\\"article comment\\\", {\\n comment: \\\"Great article\\\"\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Check out [this article](http://www.marketingprofs.com/articles/2016/31239/how-to-use-customer-insight-to-create-better-content?adref=nlt120816&utm_content=45777337&utm_medium=social&utm_source=twitter) to learn how to leverage customer insight to fuel content decisions!\"\n}\n[/block]\n### Tracking Contact Forms\n\nIt’s important to track when users identify themselves and reach out regarding experiences with your site, your support or transactions. This could include:\n\n- Downloading a White Paper\n- Downloading an eBook\n- Submitting a Demo Request Form\n- Registering for a Webinar\n- Submitting a Contact Request form\nand so on!\n\nFor a marketer, this information can help you measure the effectiveness of your efforts and allow you to optimize areas for improvement. You can also tie these marketing efforts directly back to ROI by measuring how many users signup for your product or become a customer after engaging with your content.\n\nTo track contact form submissions, ask your developer to customize the below code snippet for each of your contact forms:\n\n**Tracking a Demo Request Form Example:**\n\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.identify({\\n name: \\\"Name of user\\\",\\n email: \\\"[email protected]\\\",\\n company: \\\"CompanyX, Inc.\\\"\\n});\\nwoopra.track(\\\"demo request\\\", {\\n subject: \\\"Technical Demo\\\",\\n message: \\\"We would love to get a demo this week\\\"\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nOnce setup, the information will display on the user’s Woopra Profile and you can begin to segment, build customer journeys and leverage the data in your reporting!\n\n### Tracking Video Play Events\n\nIf you have a promo video on your homepage or instructional videos throughout your site, you’ll want to track when users play your video content. Customize the below tracking snippet to begin sending and measuring video engagement data in Woopra:\n\n**Tracking a Video View:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"play video\\\", {\\n title: \\\"Title of the video\\\",\\n videoId: \\\"1SF3sx\\\",\\n url: \\\"https://companya.com/promo/\\\"\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Using Google Tag Manager? Here’s a [cool tutorial for tracking YouTube videos in Woopra](http://moometric.com/integrations/woopra/track-youtube-video-views-in-woopra-using-gtm/) using GTM!\"\n}\n[/block]\n### Tracking Campaigns with UTM Tags\n\nIf you spend a significant amount of time posting to social media, running AdWords campaigns or sharing content – you’re driving traffic from hundreds of different URLs a day. But, how do you know which social media posts drove the most traffic? Can you quickly see which campaigns drove the most conversions over time?\n\nUsing UTM parameters, you can compare the performance of campaigns from different mediums and channels and measure over time.\n\nA UTM tag will answer questions such as:\n\n- Where are my visitors are coming from?\n- How are they finding me?\n- What happens after they engage with my campaign?\n\nOnce you have the basic Woopra Javascript tracking snippet installed on your website, Woopra will automatically begin tracking utm_tags for you. You can then set up Journeys and Trends reports to monitor and measure campaign effectiveness by campaign name, source, content, etc.\n\nFor example, the below Journey report shows me how many users came to Woopra through a campaign, sorted by campaign name and the actions they took after.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/d31f8ba-Campaign-Conversion-Journey-.png\",\n \"Campaign-Conversion-Journey-.png\",\n 2280,\n 1340,\n \"#f9fbfd\"\n ]\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Learn more about [UTM parameters and how to leverage them in Woopra!](https://blog.woopra.com/what-are-utm-parameters-and-how-should-you-use-them-e2257fd0a201)\"\n}\n[/block]\n### Tracking Internal Website Searches\n\nUsers searching on your website can offer insight into popular content and frequently asked questions. Leveraging this data will allow you to personalize their experience and provide the most relevant content possible. Customize the below tracking snippet to send internal search actions from your website to Woopra.\n\n**Tracking Internal Search Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"search\\\", {\\n query: \\\"campaign tracking\\\",\\n url: \\\"https://www.woopra.com/docs/\\\",\\n results: 14\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Including the number of search results will allow you to segment searches where users didn’t find any results. This tells you where there might be gaps in your content. It’s also an opportunity to reach out directly and provide an answer or automate an email campaign to provide additional assistance.\"\n}\n[/block]\n### Tracking Live Chat Actions\n\nOne of your main objectives is to get the user to identify themselves on your marketing website. A common strategy is to provide a frictionless, live chat feature.\n\nIf you’re using one of [Woopra’s Integrations partners](https://www.woopra.com/appconnect/) for chat, simply navigate to Integrations in your Woopra instance and install the integration. If not, see the below code snippet as an example of how to track live chat actions.\n\n**Tracking Live Chat Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\n// Since the user is identifying him or herself, let Woopra know who they are\\nwoopra.identify({\\n name: \\\"Name of User\\\",\\n email: \\\"[email protected]\\\",\\n company: \\\"CompanyX, Inc.\\\"\\n});\\n \\nwoopra.track(\\\"start_chat\\\");\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nOnce you begin tracking this data, it will automatically populate in the user’s profile in Woopra. You can then begin to measure the impact that chat has on driving conversions and overall customer success.\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Read [“How to Generate Leads with Data and Live Chat”](https://blog.woopra.com/how-to-generate-leads-with-data-and-live-chat-e8a43164ae5a) for additional guidance and tips!\"\n}\n[/block]\n### Tracking Signup Actions\n\nEvery SaaS company should track application signups. They are one of the most crucial indicators of traction and must be optimized over time. Properties that you can send along with a signup action might include:\n\n- Email address\n- Name\n- Username\n- Plan/account level\n- Company name\n\nAs well as any other fields relevant to your business that you’re collecting during signup. The most important property to send with the signup action is the user’s email address. This is what allows you to identify the visitor and [track them across multiple devices](https://docs.woopra.com/docs/unique-identifiers-and-profile-merging) (e.g. laptop, iPhone, work computer, etc).\n\nTo track these signup actions, you can define the action name string and the properties associated with that action object, as shown below.\n\n**Tracking Signup Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"signup\\\", {\\n company: \\\"My Business\\\",\\n name: “John Doe”,\\n username: \\\"johndoe\\\",\\n email: “[email protected]”,\\n plan: \\\"Free Trial\\\"\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nThe code above will track a custom action titled “signup” with the additional information of the account created.\n\nPassing these actions into Woopra will automatically show the information being sent in real-time on the user profiles and you can start to build custom Trends and Journeys Reports. For example, you could measure the number of signups by company to understand if your product is expanding across an organization.\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Actions and properties should always be lowercase!\"\n}\n[/block]\n### Tracking Logon Actions\n\nHow often do users login to your application? Who is logging on and what actions do they take next? Tracking login actions will answer these questions and help you understand how often successful users login, the authentication methods used and more!\n\nHaving this data gives you the ability to calculate conversions, success and failure rates. Work with your developer to have login actions sent to Woopra.\n\nHere’s an example of what the code will look like:\n\n**Tracking Logon Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\n// Send at least the email address to Woopra in case the user is logging\\n// in from a different device. Woopra prefers \\\"emails\\\" over \\\"cookies\\\".\\nwoopra.identify({\\n email: \\\"[email protected]\\\"\\n})\\nwoopra.track(\\\"login\\\");\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Profile Update Actions\n\nWhen a user updates their profile information within your application or on your website, you’ll want to track this information in Woopra. Send it as a ‘profile update’ action, and include any of the fields that are relevant to your user profiles. See the below example for reference.\n\n**Tracking Profile Update Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.identify({\\n fname: \\\"First name\\\",\\n lname: \\\"Last name\\\",\\n company: \\\"Company\\\",\\n name: \\\"First Last\\\",\\n});\\n \\nwoopra.track(\\\"profile update\\\");\\n</script>\",\n \"language\": \"text\"\n }\n ]\n}\n[/block]\n### Tracking Payment Actions\n\nIt’s essential to track when customers make payments. You can leverage this data throughout Woopra in your reporting to measure and monitor success! Whenever a user makes a payment, you’ll want to send properties such as payment amount and what service the payment was for.\n\nTrack every time you collect a payment from your customers! For recurring payments, you may need to track server-side events, since the user will not be on the website during renewal.\n\nThe action tracking code will look similar to this:\n\n**Tracking Payment Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"payment\\\", {\\n amount: 500,\\n product: \\\"premium\\\"\\n});\\n</script>\",\n \"language\": \"text\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Use Stripe for payment processing? Even better! We’ve built a custom integration with Stripe to make payment tracking seamless. Simply install the integration and let Woopra do the work!\"\n}\n[/block]\n### Tracking Subscription Actions\n\nSaaS companies live and die by their ARR (Annual Recurring Revenue), MRR (Monthly Recurring Revenue), ACV (Annual Customer Value), and LTV (Lifetime Value). While it’s important to measure new subscriptions, it’s equally important to measure subscription changes over time to keep a pulse on the health of your customer base.\n\nYou can drill down based on any available metrics such as geolocation, campaigns, lead sources, platforms, and more! Tracking subscription actions in Woopra will allow you to answer essential questions such as:\n\n- What are my highest and lowest performing customer segments?\n- At what point are customers likely to churn?\n- How often do people engage with my product (or take any action) after becoming a customer?\n\nEvery time a customer subscription is created, modified, or canceled, you can send an action called “subscription update” to Woopra with the following properties:\n\n- **old acv:** The previous ACV value of the subscription.\n- **new acv:** The new ACV value of the subscription.\n- **delta:** The difference between previous ACV and new ACV.\n\nFor example, let’s say a customer upgrades from a $99/month (ACV $1,188) package to a $199/month (ACV $2,388) package. The resulting increase in your ARR (Annual Recurring Revenue) is your ACV delta, which is $1,200 in this example.\n\nTo begin tracking subscription actions, follow the same steps to defining your action name string and the properties associated with the action object. Adding the above-mentioned properties, your javascript string will look like this:\n\n**Tracking Subscription Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"subscription update\\\", {\\n \\\"old acv\\\": 1188.0,\\n \\\"new acv\\\": 2388.0,\\n \\\"delta\\\": 1200.0,\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n- If the customer is creating the subscription for the first time, the old ACV is 0\n- If the customer is downgrading the subscription, the old ACV is higher than new ACV and the delta is negative\n- If the customer is canceling their subscription, the new ACV is 0 and the delta is negative\n\nOnce you begin sending subscription actions to Woopra, navigate to your schema setup and customize the property types, key, aggregation and description. This will allow you to personalize how these events are displayed and seamlessly leverage the data across Woopra.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/2fbf28d-Schema-Subscription-Update.png\",\n \"Schema-Subscription-Update.png\",\n 2424,\n 1176,\n \"#f8f7fa\"\n ]\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** To learn more about measuring subscription changes in Woopra, check out [this blog post!](https://blog.woopra.com/how-to-measure-subscriptions-churn-with-woopra-6060d61e4e9d) Or, for a deep dive into the Woopra schema setup and different ways it can be customized, [read this post!](https://blog.woopra.com/why-we-built-a-customizable-woopra-schema-96952f4e87)\"\n}\n[/block]\n### Tracking Free Trials and Onboarding\n\nEvery SaaS company will have its own onboarding process with key milestones, all of which should be tracked to monitor and analyze product adoption and usage. This is where you should give a lot of thought to answering the following question:\n\n> What actions must a user take to get value out of my product?\n\nIt helps to pretend to be a new user and go through the signup, implementation, and onboarding process yourself, documenting every critical action along the way. \n\nFor an example, let’s look at Woopra customer, [CloudApp](https://blog.woopra.com/cloudapp-answers-every-essential-business-question-with-woopra-38c916f2d790). CloudApp is a SaaS solution that enables users to capture and share gifs, videos, images and screenshots seamlessly. They’ve outlined what success looks like for new users and track these essential onboarding milestones in a Woopra Journey. For them, these key events include:\n\n- Signup\n- Account Confirmation\n- 1st Screen Drop Created\n- 10th Screen Drop Created\n- Annotation\n- First Screen Recording\n- Added New Team Members\n\nBecause they’re tracking each of these milestones as an event, they can visualize and optimize their onboarding workflow in Woopra. A [Journey](https://docs.woopra.com/docs/journeys), for example, maps out these actions step-by-step, allowing CloudApp to identify any bottlenecks and optimize the user experience for conversions.\n\nAt Woopra, we use similar Journeys for our own reporting every day. One such Journey outlines when users:\n\n- Came to our Landing Page\n- Signup\n- Added a Credit Card\n- Installed the Mobile App\n- Became a Customer\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/e70793a-Campaign-Conversion-Journey-1.png\",\n \"Campaign-Conversion-Journey-1.png\",\n 2280,\n 1340,\n \"#f9fbfd\"\n ]\n }\n ]\n}\n[/block]\nFrom here, we can build micro-journeys that show what users do in between these key moments.\n\nBy tracking each onboarding action, you can analyze, slice and dice your data throughout Woopra. The action activity is being displayed in each customer profile, and it also gives you the ability to see how this action performs over time and what properties are driving its performance\n\nTo begin tracking your onboarding actions in Woopra, outline the milestones that matter most to your organization. These could include actions that users take within your product or other events such as opening an email or communicating with your sales team.\n\nIntegrating your marketing, sales or customer support applications via [our integrations](https://www.woopra.com/appconnect/) will automatically bring the associated app actions into Woopra for analysis throughout the platform. To track actions specific to your product in Woopra, you’ll need to write some custom code. Read on to the next step for guidance on tracking product usage actions.\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Learn more about how to build and optimize an onboarding [Journey!](https://docs.woopra.com/docs/journeys)\"\n}\n[/block]\n### Tracking Product Usage\n\nIt’s great to track when new users signup for your product, but what’s even more important is what happens after they signup. What features are they engaging with? Where are they getting stuck? What does a healthy customer look like in your product? How do you identify users who qualify for an upsell? Tracking the behavior that users take once they’re in your application will allow you to answer all of these questions, and more!\n\nAgain, before deciding the product actions to send to Woopra, you’ll want to start by asking:\n\n> What are the key actions a user takes to get value from my product?\n\nIn addition to your “core” actions, you should also track the actions you would expect to see advanced user’s doing, such as using your more complex features. This will enable you to analyze the behavior of power users and give you clues as to how you can help move your less advanced users along this path.\n\nTracking product usage will be different depending on if you have a Single Page Application (SPA) or a Mobile application. We’ve outlined best practices for both below!\n\n### Tracking Product Actions for a Single Page Application (SPA)\n\nA Single Page Application is a website or web app that loads all of the resources required to navigate throughout the application on the first page!\n\nIt’s important to track the application load_time property for basic monitoring and to see if application load times are impacting conversions or churn. To track this as an action, see the example below.\n\n**Tracking Product Actions for SPA Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"app load\\\", {\\nload_time: 1231 // time in milliseconds\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking When Users Switch Between Views\n\nTrack CRUD operations. The way to think about this is to identify all of the main entities in your project (report, dashboard, widget, song, board, project, etc…) and all the verbs that apply to them (create, view, update, delete, archive, share, etc…). Track all the required combinations of verbs and entities.\n\nFor example, a recruiting company would probably want to track when users create a job listing. So they could track actions for when a user creates a job listing, updates a job listing and archives job listing. The code could look like this:\n\n**Tracking When Users Switch Views Example:**\n\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"create widget\\\", {\\n title: \\\"Widget title\\\",\\n type: \\\"chart\\\",\\n project: \\\"143\\\", // refer to the environment ID if users can have multiple one.\\n custom_feature: \\\"you get the point...\\\"\\n});\\n \\nwoopra.track(\\\"create job listing\\\", {\\n title: \\\"Marketing Intern\\\",\\n department: \\\"marketing\\\"\\n});\\n \\nwoopra.track(\\\"update job listing\\\", {\\n title: \\\"Marketing Associate\\\",\\n department: \\\"marketing\\\"\\n});\\n \\nwoopra.track(\\\"delete widget\\\", {\\n project: \\\"142\\\"\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Product Actions for a Mobile Application\n\nSimilarly to SPAs, mobile applications can have their own custom actions tracked. Follow the same naming convention for verbs and nouns and make sure you’re also tracking mobile.\n\nSome users can get more sophisticated by pushing attribution data to Woopra as campaign properties. For example, you could send a campaign_name tag with your mobile load action when the user opens your app through an advertisement or through another application. The tracking action would look like this:\n\n**Tracking Product Actions for a Mobile Application:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"mobile load\\\", {\\n campaign_name: \\\"July 2017 Promo\\\",\\n campaign_source: \\\"facebook\\\",\\n campaign_medium: \\\"ad\\\"\\n});\\n \\nwoopra.track(\\\"mobile view\\\", {\\n title: \\\"Dashboard\\\"\\n});\\n \\nwoopra.track(\\\"create widget\\\", {\\n \\n})\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n##Other Important SaaS Actions to Track\n\n###Tracking Team Sharing and Collaboration Actions\n\nDoes your application have sharing or collaboration capabilities? You’ll want to track when users invite other users to join projects, when they join or when they share specific entities. Here’s what this could look like:\n\n**Tracking Sharing and Collaboration Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"user invite\\\", {\\n user: \\\"[email protected]\\\"\\n});\\n \\nwoopra.track(\\\"share widget\\\", {\\n user: \\\"[email protected]\\\",\\n widget: \\\"123\\\"\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Error and Issue Actions\n\nWhether we like it or not, issues and problems occur! Be prepared by tracking the errors that users experience. This will help you build a better product and will arm your customer success team with data to help them provide better service and support. For example, if a user receives a form error, you could submit the action below:\n\n**Tracking Error Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"form error\\\", {\\n form: \\\"signup form\\\",\\n error: \\\"Email already registered\\\"\\n});\\n \\nwoopra.track(\\\"form error\\\", {\\n form: \\\"login form\\\",\\n error: \\\"Wrong username or password\\\"\\n});\\n \\nwoopra.track(\\\"app error\\\", {\\n app_version: \\\"1.2\\\",\\n error_code: 500,\\n error: \\\"Failed to download resource A\\\"\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Email Actions\n\nIt’s important for marketers, sales and customer support teams to track when users open, receive and click on emails. Woopra integrates with most of the popular email marketing platforms to make email tracking a breeze. Track email events and update lead lists automatically!\n\nFor example, the [Marketo app](https://www.woopra.com/appconnect/marketo) will track Marketo actions such as an email is sent, or when a user opens and clicks on it. These actions are tracked, sent to Woopra, and included in the Woopra Profile.\n\nIn addition, you’ll have [Trends Reports](https://docs.woopra.com/docs/trends) reflecting these events. For example, you may want to analyze which emails had the most opens among customers in California. Or, you may want to build a [Journey Report ](https://docs.woopra.com/docs/journeys)report showing where people drop off on the path to conversion after they come from an email campaign – and ultimately what impact their email marketing is having on conversion.\n\nYou can also set up [automations](https://docs.woopra.com/docs/triggers) to automatically send new leads to your email marketing software or update existing lead records. For example, if someone signs up on your website, you can set up a Trigger to automatically send the lead’s information to Hubspot and a new Hubspot Lead will be created. If they change their company information, later on, those fields will be updated in their Hubspot Lead record.\n\nWant to use all this data in Woopra to update your email marketing lists based on user behavior? This functionality is also built into our integrations. For example, you could update your Marketo List for “Ready to Buy” users whenever a user completes a free trial, uses the app at least 20 times, and has no unresolved help desk tickets!\n\nPick your email platform below to learn more about each integration:\n\n- [Marketo](https://www.woopra.com/appconnect/marketo)\n- [Hubspot](https://www.woopra.com/appconnect/hubspot)\n- [MailChimp](https://www.woopra.com/appconnect/mailchimp)\n- [SendGrid](https://www.woopra.com/appconnect/sendgrid)\n- [Eloqua](https://www.woopra.com/appconnect/eloqua)\n- [Mandrill](https://www.woopra.com/appconnect/mandrill)\n- [Campaign Monitor](https://www.woopra.com/appconnect/campaignmonitor)\n- [Customer.io](https://www.woopra.com/appconnect/customerio)\n- [Mailgun](https://www.woopra.com/appconnect/mailgun)\n\n### Tracking Support Ticket Actions\n\nAre users who submit support requests more or less likely to convert? What impact do certain product features have on support tickets? Do well-answered support tickets drive conversions? Find all of this out and more by integrating with one of our customer support tools!\n\nWoopra integrates with Zendesk, Freshdesk and a few others. Track when users submit tickets and track when they get resolved. This is helpful to study the attribution of your customer success team to the retention of your customers.\n\nPick your support tool below to learn more:\n\n- [Zendesk](https://www.woopra.com/appconnect/zendesk)\n- [Freshdesk](https://www.woopra.com/appconnect/freshdesk) \n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** [Learn how User Data Leads to Better Customer Service!](https://www.livechatinc.com/blog/how-user-data-leads-to-better-customer-service/)\"\n}\n[/block]\n### Tracking CRM Action Data\n\nLeverage behavioral data from Woopra in Salesforce to get a pulse on customer health without ever leaving your CRM!\n\n[The Woopra + Salesforce integration](https://www.woopra.com/appconnect/salesforce) allows you to automatically create leads within Salesforce and convert them to Salesforce “opportunities” when they meet specified criteria, such as engaging with your website in a certain way or opening your emails. The app also synchronizes your Salesforce fields with Woopra visitor data to automatically create or update visitor properties.\n\nFor example, if someone signs up on your website, the integration could automatically add the user as a lead in Salesforce and populate the lead record with the user’s information such as name, email address, company, and more. Conversely, lead data in SalesForce can be sent to Woopra to automatically update the profile with the lead information.\n\nThe integration could also automatically convert leads to opportunities when the lead has performed specific actions, such as using your SaaS product ten times, submitting at least one support ticket or starting a live chat with a sales rep!\n\n> “Woopra is helping to drive customer success within the customer data analytics market by leveraging the power of the Salesforce Platform to seamlessly integrate behavioral insight and CRM, ultimately transforming the way companies connect with their customers.” – Ron Huddleston, senior vice president, ISV & Channel, Salesforce.com\n\nNot using Salesforce? Check out our other CRM integrations including: [PipeDrive](https://www.woopra.com/appconnect/pipedrive), [CapsuleCRM](https://www.woopra.com/appconnect/capsulecrm) and **Microsoft Dynamics**.\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Learn [how to build a product qualified lead engine](https://www.business2community.com/product-management/build-sales-accelerating-product-qualified-lead-engine-01696527) uniting product engagement and CRM data!\"\n}\n[/block]\n### Tracking NPS Score Actions\n\nAre you collecting valuable NPS data from your customers? Track this data in Woopra to build audiences of promoters and detractors. Integrating with [Delighted](https://www.woopra.com/appconnect/delighted) will allow you to automatically see NPS survey results on profiles on Woopra. You can trigger personalized emails to re-engage detractors or send a special offer to your promoters!\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Check out [this post](https://blog.woopra.com/new-in-appconnect-bellgram-and-delighted-75788e41083f) for more tips on leveraging NPS data in Woopra!\"\n}\n[/block]\n### Tracking Phone Call Actions\n\nHow do phone calls impact revenue? How many customers make a call to your team prior to purchasing? Are certain support team members better at handling customer calls than others? Find all of this out, and more, by leveraging phone call data in Woopra! Woopra integrates with [Ringostat](https://www.woopra.com/appconnect/ringostat) [Zoom](https://www.woopra.com/integrations/zoom) and [Sonar](https://www.woopra.com/integrations/sendsonar) to seamlessly track phone call events.\n\nThese events will attach to your Woopra profiles so that you can instantly see if a customer has tried to reach you via phone, who they spoke to, any notes regarding the call and more!\n\nLeveraging Woopra’s segmentation capabilities, you can build Journeys and Trends Reports to determine if phone calls impact a user’s likelihood to purchase or churn. Further drilling down to the representative level, allows you to identify employees that are successfully handling support or sales calls and who could use some help!","excerpt":"The Ultimate Action Tracking Setup Guide: SaaS Edition","slug":"saas-tracking","type":"basic","title":"SaaS Tracking","__v":1,"updatedAt":"2019-03-22T20:29:14.007Z","metadata":{"title":"","description":"","image":[]}},{"_id":"5d041869588d4e0024499632","version":"5b070ce4060bee00035d8d12","updatedAt":"2020-08-30T16:26:46.213Z","createdAt":"2019-06-14T21:58:01.384Z","project":"58b721a1f22b830f009a0bcd","category":"5d0157e5dba6ec001c22b539","parentDoc":"5b15a4ac34eb070003426a6d","user":"5e14d778c12c2802e836097a","updates":[],"next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":3,"body":"##Important Metrics and KPIs\nNow that we are tracking the data we want, the next step is to make sense of the data. If you haven't already started tracking custom events, be sure to check out our [SaaS Tracking](doc:saas-tracking) guide. \n\nSaaS has many important metrics and KPIs that we can look at. Some of these metrics can include the conversion journey, subscription data, churn rates, MMR and satisfaction or NPS scores. Let's take a look at some useful reports we can build in Woopra that can give us insight into these metrics and how we make better data-driven decisions.\n\n##Tracking the Conversion Journey\nTypically for SaaS, users will go through a process of coming to your site, viewing your product offerings, start a trial, using some product features, and then finally convert to a paying customer or subscriber. Simple enough, but there is a lot that can go into this process and there's a lot of data we can extract. \n\nOne thing we can do to find out more is to build out a Journey report to get data on this process. We'll be analyzing users that went to our homepage, what were the top pages they viewed before signing up for a trial, did they add the code to their site, run a report, then finally convert to a paying customer.\n\nLet's take a look at this example Journey for Woopra and how we went about building it:\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/38e1bd7-Image_2019-06-24_at_3.27.20_PM.png\",\n \"Image 2019-06-24 at 3.27.20 PM.png\",\n 890,\n 790,\n \"#f1eff5\"\n ]\n }\n ]\n}\n[/block]\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/2dd2ef0-Image_2019-06-24_at_3.22.32_PM.png\",\n \"Image 2019-06-24 at 3.22.32 PM.png\",\n 1906,\n 728,\n \"#f4f4fa\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n**Step 1** - Add a page view for our landing page. This will get all the users who came to our site.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/b49d458-Image_2019-06-24_at_3.24.28_PM.png\",\n \"Image 2019-06-24 at 3.24.28 PM.png\",\n 1162,\n 1030,\n \"#f4f7f9\"\n ]\n }\n ]\n}\n[/block]\n**Step 2** - We want to see which pages our users are viewing before signing up for a trial. We can add a dynamic step to have Woopra show us our top most viewed pages. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/56768fc-Image_2019-06-24_at_3.26.39_PM.png\",\n \"Image 2019-06-24 at 3.26.39 PM.png\",\n 1030,\n 682,\n \"#f5f8fa\"\n ]\n }\n ]\n}\n[/block]\n**Step 3** - Our sign up step. It's a good idea to track your sign up events so you can add this as a step for analysis. We'll select this event to see how many users are signing up after viewing our site. We've made both of these steps optional so the user's do not need to complete these steps in order to move to the final step. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/02fd26a-Image_2019-06-24_at_3.29.45_PM.png\",\n \"Image 2019-06-24 at 3.29.45 PM.png\",\n 1046,\n 616,\n \"#f5f8fa\"\n ]\n }\n ]\n}\n[/block]\n**Step 4 and 5** - In these steps, we'll track product usage. We want to know what product features are driving conversions. It's good to track all your product usage as events so you can add this step for analysis. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/6715adf-Image_2019-06-24_at_3.32.09_PM.png\",\n \"Image 2019-06-24 at 3.32.09 PM.png\",\n 590,\n 142,\n \"#dee7e0\"\n ]\n }\n ]\n}\n[/block]\n**Step 6** - For our last step, we want our conversion event. Whether this is a payment event, or a subscription started event, this is where the customer converts to paying. We'll select our payment event for this example.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/f5114dc-Image_2019-06-24_at_3.34.21_PM.png\",\n \"Image 2019-06-24 at 3.34.21 PM.png\",\n 1034,\n 668,\n \"#f5f8fa\"\n ]\n }\n ]\n}\n[/block]\nLastly, we'll break this report down by Months and we can see a complete Journey of the conversion process.\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/d7c5ce3-Image_2019-06-24_at_3.36.19_PM.png\",\n \"Image 2019-06-24 at 3.36.19 PM.png\",\n 2340,\n 2176,\n \"#f7f7fa\"\n ]\n }\n ]\n}\n[/block]\n###What insights can we gather from this report?\n####Site Improvements \nNow that we have this data, we can see where some dropoffs occur and this can indicate areas of improvement. We can see after users sign up, only about 32% are adding code to their site. This could indicate a bottleneck in the conversion process. We could improve this step and see higher conversion rates. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/b16c67f-Image_2019-06-24_at_3.38.05_PM.png\",\n \"Image 2019-06-24 at 3.38.05 PM.png\",\n 480,\n 326,\n \"#fcf5f9\"\n ]\n }\n ]\n}\n[/block]\n####Drilldowns, Triggers, and Automations\nFor certain steps, we could even drill down to see which users didn't move on to the next step. Once we have this list, we could run some outreach campaign to try and reengage these users. Additionally, we could create a [People Report](doc:people-reports) based on users who signed up but didn't add code. This is another way we could get that list of users. \n\n####Improving Funnel Conversions\nFrom this report, we can also learn which features are driving conversions. We could even make additional Journey reports focusing on specific features to get a more micro view on the Journey. This can bring some useful insight to help drive conversions. If we know what our top performing products are, we could change our marketing and website to highlight these items and drive more subscriptions.\n \n##Tracking Subscriptions and Churn\nSaaS companies often have a subscription model for certain products or services. Using a [Cohort](doc:cohort) report, we can monitor the health of our subscriptions and churn. \n**Step 1** - Select your timeframe and initial action such as a subscription 'signup' event. You can add constraints as well if you want to focus in on a specific subscription tier or plan as well.\n\n**Step 2** - Select your repeat action which is the subscription pay event. \n\n**Step 3** - Select your metric. We can count visitors to see the number of subscribers.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/1dbb93f-Image_2019-06-11_at_3.02.42_PM.png\",\n \"Image 2019-06-11 at 3.02.42 PM.png\",\n 1218,\n 942,\n \"#f8f5f6\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n###What insights can we gather from this report?\n####Churn Monitoring and Benchmarking\nNow that we have this data, we can look at the report below and this will give us a clear view of churn and renewed subscriptions. \n\nWe can see how many subscriptions are created each month, and how many continue to renew their subscriptions. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/0e25a10-Image_2019-06-11_at_3.04.03_PM.png\",\n \"Image 2019-06-11 at 3.04.03 PM.png\",\n 3492,\n 2762,\n \"#f8f8f9\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n####Sales and Subscriptions Ammounts\nWith a simple change to our configuration We can change this report to show total sales numbers and ammounts.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/f5561ed-Image_2019-06-12_at_11.56.33_AM.png\",\n \"Image 2019-06-12 at 11.56.33 AM.png\",\n 528,\n 102,\n \"#f4f2f3\"\n ],\n \"caption\": \"When we change the metric to 'sum of total', we can see a revenue and subscription report with total amounts.\"\n }\n ]\n}\n[/block]\n#Campaign Tracking Attribution\nAnother important aspect to conversions and sales is to find out which campaigns are working the best. For this, we highly advise the use of [UTM tags](doc:campaign-tracking) for any incoming links.\n\nWoopra will automatically track this data so you can build out reports based on specific campaigns. We can create an attribution report to see which ones are performing the best. \n\n**Step 1** - After we select our timeframe and segment, we will select our initial action. This is where we want to start the analysis of the Attribution Report. For our example, we want to start at the beginning of the user's profile so we'll select Any Action.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/7a3e9f6-Image_2019-08-22_at_3.53.39_PM.png\",\n \"Image 2019-08-22 at 3.53.39 PM.png\",\n 1092,\n 1016,\n \"#eef2f9\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n**Step 2** - Next, we want to define the touchpoints or the actions that are contributing to the conversion event. Here we'll select a Page View event where a Campaign Name exists. We want to break this report down by the various Campaign Names, so under the Dimensions, we'll select 'Campaign Name'. \n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/9abfa19-Image_2019-08-22_at_3.57.22_PM.png\",\n \"Image 2019-08-22 at 3.57.22 PM.png\",\n 858,\n 724,\n \"#e7eef8\"\n ]\n }\n ]\n}\n[/block]\n**Step 3** - We want to define the actual conversion event. This could be a signup event, a payment, a subscription, etc. For this set, our conversion event will be when they visit the contact page. \n\n**Step 4** - Lastly, we need to choose an attribution model to define how we want to distribute the attribution. We'll just select 'Last Touch' because we want all the credit to go to the last campaign that the user came to the site from before the conversion. To learn more about the models, check out our documentation on the [Attribution Reports(doc:attribution). \n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/da09f8d-Image_2019-08-22_at_4.04.07_PM.png\",\n \"Image 2019-08-22 at 4.04.07 PM.png\",\n 1778,\n 1550,\n \"#f6f8fb\"\n ]\n }\n ]\n}\n[/block]\n###What insights can we gather from this report?\n####Best Marketing Channels \nThis report will show us the overall number of people that are coming to your site and then converting. We can see that Adwords is working the best. \n\n##Facebook/Adwords Order Tracking Trends\nWe can dive even deeper and find out how specific campaigns are doing. We could change the touchpoints to be specific campaigns by adding parallel touchpoints for each specific campaign. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/6bd3bf3-Image_2019-08-22_at_4.07.49_PM.png\",\n \"Image 2019-08-22 at 4.07.49 PM.png\",\n 1608,\n 1072,\n \"#edf0f8\"\n ]\n }\n ]\n}\n[/block]\n**Step 1** - In our Trend Report, we'll first filter on a specific segment of users. We want to see only users where their 'first campaign source' contains 'facebook' and 'facebookads'. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/176c79c-Image_2019-06-12_at_3.16.40_PM.png\",\n \"Image 2019-06-12 at 3.16.40 PM.png\",\n 1024,\n 506,\n \"#dce1f5\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n **Step 2** - Next we'll select our action which is our Checkout event.\n\n **Step 3** - Lastly, we'll select what we want to compare by. Here we have order_id, email, first campaign source, and the total.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/5bfb010-Image_2019-06-12_at_3.17.00_PM.png\",\n \"Image 2019-06-12 at 3.17.00 PM.png\",\n 2516,\n 2480,\n \"#f7f5f8\"\n ]\n }\n ]\n}\n[/block]\n###What insights can we gather from this report?\n####Campaign Performance \nHere we have really useful information on how our Facebook ads are doing. We can create similar reports for other campaign sources as well, then we can see which orders are attributed to which campaigns. Again, if we're in marketing, this is super valuable info. We can clearly see who is ordering what, and which Facebook campaign drove the most sales. \n\n\n##Order Lists and Reports\nLastly, we can build out a report to see all the lastest subscriptions.\n\n**Step 1** - First we'll select our timeframe and action. We want a list of recent subscriptions so we'll use our Stripe integration and the 'subscription updated' event.\n\n**Step 2** - Next we'll add the relevant columns. You could select the plan type, trial start and end dates, total plan cost, etc. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/1be8d92-Image_2019-06-25_at_1.38.18_PM.png\",\n \"Image 2019-06-25 at 1.38.18 PM.png\",\n 2354,\n 536,\n \"#f9eef2\"\n ]\n }\n ]\n}\n[/block]\n###What insights can we gather from this report?\n####See All Your Subscriptions\nThis report is great for a straight list of subscriptions and who made them. If we export this list, we can find out which plans are selling the most. This can give us a general overview of popular plan types so we can focus on offerings and make adjustments to plan tiers. We could even use this list to email users that purchased a certain plan and ask for reviews or product feedback. \n\n##Explore Your Data\nI hope these examples give you some ideas about the reports you can build and the types of questions you can answer. We encourage you to explore your data and experiment with the different reports because you never know what important trends or metrics you might uncover.","excerpt":"Let's explore some helpful data points and reports that can be useful for SaaS companies.","slug":"saas-report-examples","type":"basic","title":"SaaS Report Examples","__v":0,"metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false}],"childrenPages":[{"_id":"5b15ba1c8e087100030613cf","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5d0157e5dba6ec001c22b539","user":"5ad7decda3740f0003a5f648","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-04T22:15:56.794Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"## The Ultimate Action Tracking Setup Guide: eCommerce Edition\n\nWe wrote a post featuring Best Practices for Custom Event Collection to help new Woopra users get started with the fundamentals of tracking their customer data.\n\nWhile this was an excellent place to kick-off, it’s important to remember that every industry and vertical is unique. For example, an eCommerce company will want to track different actions than a Mobile Gaming or Travel company, and so on. To help guide you through this process, we’ve gone a step further and put together tips and best practices by industry. So, without further ado, here is: **The Ultimate Tracking Setup Guide: eCommerce Edition.**\n\n## Identifying Key Customer Lifecycle Moments for eCommerce\n\neCommerce stores have a distinct advantage over bricks and mortar retail locations – the ability to track and understand every action a customer takes. But beyond the simple pageviews, deciding exactly which of these actions to track is where the work begins.\n\nIf you’re using [Magento](https://www.woopra.com/appconnect/magento), [WooCommerce](https://www.woopra.com/integrations/woocommerce) or [Shopify](https://www.woopra.com/integrations/shopify), you can streamline this process by installing the Integrations with a few clicks. This will automatically begin tracking relevant eCommerce platform events right out of the box! But what if you’re not using Magento or Shopify? \n\nWe’ve combed through the most successful eCommerce companies using Woopra and identified trends in what they’re tracking to provide you with a foundation for getting started. So whether you’re a startup just beginning to track your customer data or an established brand looking to expand, here are the actions that will get you on the road to designing better customer experiences with data.\n\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"Keep in mind that the help of a developer will be required to code the custom actions you’d like to track. But, by using this guide, you’ll be able to outline the key actions first to **significantly cut down on implementation and development time!**\"\n}\n[/block]\n## Tracking Marketing Website Actions\n\n### Tracking Anonymous Website Traffic\n\nWoopra is designed to track unique, unidentified website and mobile app users from their first touch. The user is assigned a unique ID and all of their anonymous activity is tracked in the customer profile. You’ll also have data regarding the user’s location, system, platform, referrer (if applicable) and more!\n\nOnce the user is identified – through signing up, subscribing, or a similar activity – all previous anonymous activity will be merged into the same [Profile](https://docs.woopra.com/docs/profiles). This provides a complete picture of the full lifecycle for every user, starting with the first touch.\n\nTo start tracking anonymous website traffic:\n\n- Customize the domain name in the snippet below.\n- Copy and paste the Woopra [Javascript tracking code](https://docs.woopra.com/reference) into the head section of your website pages.\n- Ensure the code is pasted into every page of your site that you’d like to track.\n\n**Woopra Javascript Tracking Code**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\n!function(){var a,b,c,d=window,e=document,f=arguments,g=\\\"script\\\",h=[\\\"config\\\",\\\"track\\\",\\\"trackForm\\\",\\\"trackClick\\\",\\\"identify\\\",\\\"visit\\\",\\\"push\\\",\\\"call\\\"],i=function(){var a,b=this,c=function(a){b[a]=function(){return b._e.push([a].concat(Array.prototype.slice.call(arguments,0))),b}};for(b._e=[],a=0;a<h.length;a++)c(h[a])};for(d.__woo=d.__woo||{},a=0;a<f.length;a++)d.__woo[f[a]]=d[f[a]]=d[f[a]]||new i;b=e.createElement(g),b.async=1,b.src=\\\"//static.woopra.com/js/w.js\\\",c=e.getElementsByTagName(g)[0],c.parentNode.insertBefore(b,c)}(\\\"woopra\\\");\\n \\n// configure tracker\\nwoopra.config({\\n domain: \\\"mybusiness.com\\\"\\n});\\n \\n// track pageview\\nwoopra.track();\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nBy placing this snippet on your website pages, you’ll instantly see Woopra displaying website activity into the platform. This is the essential first step to tracking and sets the foundation for future actions.\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** If you’re hosting your website on WordPress, you don’t need to install the Javascript snippet to track website activity. Simply, install the [Woopra WordPress integration](https://wordpress.org/plugins/woopra/) and the tracking code will automatically be added!\"\n}\n[/block]\n### Tracking Additional Pageview Actions\n\nMost of the activity on your site likely happens pre-sale. That’s when customers are exploring your site, looking through your products, and managing their carts. All of this activity needs to be tracked. Remember that along with the actions, you will also want to send properties, which are pieces of information that describe the event. Here are some of the key events and properties you should be sent outside of the basic pageviews.\n\n### Tracking Product Pageview Actions\n\nYou’ll want to track when website visitors are viewing specific products, product categories and product pages on your site. Along with the pageview actiion, we suggest tracking:\n\n- product_name\n- product_price\n- product_sku\n- product_category\n- product_url\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Keep in Mind:** This event should replace the default pageview action only for the product pages.\"\n}\n[/block]\nHere’s an example of the tracking code that you could customize to track product view actions:\n\n**Tracking Product Pageview Actions Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('view product', {\\n product_name: 'iPhone 7 Plus',\\n product_price: 799.99,\\n product_sku: 'A5343S',\\n product_category: 'Mobile devices & Accessories',\\n product_url: 'https://mystore.com/products/iphone-7-plus'\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Adding the Product URL to the product view event will generate a link to the product in the Woopra User Profile. This is an easy way to quickly reference the exact product a user was viewing.\"\n}\n[/block]\n### Tracking Product Video View Actions\n\nEach one of your products could have an associated video that dives deeper into the product that you’re selling. You should track when a user plays these videos to help identify the importance of content on conversions. The properties that you send along with this event might include:\n\n- product_name\n- product_price\n- product_sku\n- product_category\n- product_url\n- video_url\n\nWhen you customize the code, it should look similar to this:\n\n**Tracking Product Video View Events Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('view product video', {\\n product_name: 'iPhone 7 Plus',\\n product_price: 799.99,\\n product_sku: 'A5343S',\\n product_category: 'Mobile devices & Accessories',\\n product_url: 'https://mystore.com/products/iphone-7-plus',\\n video_url: 'https://mystore.com/products/iphone-7-plus#play-video-47'\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n###Tracking Blog Actions\n\nHow do you know what types of content perform better than others? Are users who read a blog post more likely to convert to paying customers?\n\nTrack your blog activity to measure blog attribution, inform future blog post topics and measure engagement. You can leverage this data in reporting and funnels to optimize engagement.\n\nFor example, the below ‘Blog Attribution’ funnel shows how many people read a blog post and then went on to take other actions on my website. You can see how many visitors read a post and subsequently subscribed, added an item to their cart, added a credit card and made a purchase.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/a1e190a-Blog-Journey-Ecommerce.png\",\n \"Blog-Journey-Ecommerce.png\",\n 1926,\n 684,\n \"#f7f9fd\"\n ]\n }\n ]\n}\n[/block]\nTo track your blog activity, provide the below example to your developer.\n\n**Blog Tracking Code Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"article view\\\", {\\n title: \\\"Blog post title\\\",\\n url: \\\"https://blog.companya.com/we-are-awesome\\\",\\n author: \\\"John Smith\\\",\\n category: \\\"News\\\",\\n published_on: 125234234234 // timestamp\\n})\\n \\n// You may track when users leave comments as well:\\nwoopra.track(\\\"article comment\\\", {\\n comment: \\\"Great article\\\"\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Check out [this article](http://www.marketingprofs.com/articles/2016/31239/how-to-use-customer-insight-to-create-better-content?adref=nlt120816&utm_content=45777337&utm_medium=social&utm_source=twitter) to learn how to leverage customer insight to fuel content decisions!\"\n}\n[/block]\n### Tracking Contact Forms\n\nIt’s important to track when users identify themselves and engage with other content on your site. For eCommerce, this might include Contact Forms that are for:\n\n- Providing Feedback\n- Submitting a Complaint\n- Order Status Inquiry\nand so on!\n\nFor a customer success teams, this information can help you measure the effectiveness of your efforts and allow you to optimize areas for improvement. You can also tie these efforts directly back to ROI by measuring how many users submit support inquiries or provide feedback and make (or don’t make) a purchase.\n\nTo track contact form submissions, ask your developer to customize the below code snippet for each of your contact forms:\n\n**Tracking a Feedback Contact Form Example:**\n\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.identify({\\n name: \\\"Name of user\\\",\\n email: \\\"[email protected]\\\",\\n phone: \\\"user phone number\\\"\\n});\\nwoopra.track(\\\"feedback form\\\", {\\n subject: \\\"Support XYZ Feedback\\\",\\n message: \\\"I really loved your live chat support. Would like it if you were online at \\n nights as well!\\\"\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nOnce setup, the information will display on the user’s Woopra Profile and you can begin to segment, build customer journeys and leverage the data in your reporting!\n\n### Tracking Website Video Play Actions\n\nIf you have a promo video on your homepage or additional landing pages throughout your site, you’ll want to track when users play your video content. This is separate from product video views as they do not directly relate to a specific product that you’re merchandising. Customize the below tracking snippet to begin sending and measuring video engagement data in Woopra:\n\n**Tracking Website Video View Events Code Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"play video\\\", {\\n title: \\\"Title of the video\\\",\\n videoId: \\\"1SF3sx\\\",\\n url: \\\"https://companya.com/promo/\\\"\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Using Google Tag Manager? Here’s a [cool tutorial for tracking YouTube videos in Woopra](http://moometric.com/integrations/woopra/track-youtube-video-views-in-woopra-using-gtm/) using GTM!\"\n}\n[/block]\n### Tracking Add to Cart Actions\n\nIt’s great to track when users add an item to their shopping cart. Be sure to send the associated properties along with this event for greater depth and analysis. For example, if you send the “product SKU” along with the “Add to Cart” event, you could trigger an email campaign to everyone who added that specific item to their cart (rather than a generic category!) This allows for greater personalization and incredibly powerful insights across your Woopra reporting.\n\nThe properties you could send along with the “Add to Cart” action could include:\n\n- product_name\n- product_price\n- product_sku\n- product_category\n- product_url\n- quantity (if the user is removing an item from the cart, the quantity will be negative)\n\nAfter deciding which properties to send along with the “Add to Cart” action, your code could look like this:\n\n**Tracking Add to Cart Action Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('add to cart', {\\n product_name: 'iPhone 7 Plus',\\n product_price: 799.99,\\n product_sku: 'A5343S',\\n product_category: 'Mobile devices & Accessories',\\n product_url: 'https://mystore.com/products/iphone-7-plus'\\n quantity: 1\\n});\",\n \"language\": \"text\"\n }\n ]\n}\n[/block]\nTracking Shipping Estimate Actions\n\nAfter customers add items to their cart, you’ll probably want to provide them with an estimate of their shipping costs. This is a good event to track as well because you’ll be able to learn if the shipping price shown to a potential customer impacts their conversion rate.\n\nProperties to send along with the Shipping Estimate Action include:\n\n- zipcode\n- shipping_price\n\nYour code snippet will look similar to below:\n\n**Tracking Shipping Estimate Actions Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('estimate shipping', {\\n zipcode: 94104,\\n shipping_price: 12.95\\n});\",\n \"language\": \"text\"\n }\n ]\n}\n[/block]\n###Tracking Read Product Review Actions\n\nIf customers leave reviews for the products that you’re selling, it’s helpful to know who reads the reviews. This will allow you to measure if the product reviews negatively or positively impact conversion rates. Some important properties to track along with this event include the:\n\n- product_name\n- product_sku\n- product_price\n- product_category\n- product_url\n- product_category\n\nYou also could track:\n\n- total_reviews\n – This is useful because you’ll be able to understand if people are seeing enough reviews for the product they wish to purchase.\n- rating\n– This is also helpful to show conversions based on product rating, one of the driving forces that influence customer purchases.\n\nHere’s an example of what your custom code snippet could look like when including the above properties:\n\n**Tracking Read Product Review Actions Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('read product reviews', {\\n product_name: 'iPhone 7 Plus',\\n product_price: 799.99,\\n product_sku: 'A5343S',\\n product_category: 'Mobile devices & Accessories',\\n product_url: 'https://mystore.com/products/iphone-7-plus',\\n total_reviews: 412,\\n rating: 4.9\\n});\",\n \"language\": \"text\"\n }\n ]\n}\n[/block]\n### Tracking Product Review Submission Actions\n\nOnline reviews are essential. [92 percent of consumers](https://www.vendasta.com/blog/50-stats-you-need-to-know-about-online-reviews) now rely on product reviews to help inform purchasing decisions. If you offer reviews on your products, you’ll want to track when customers submit reviews to analyze how they impact product purchases. Properties to send along with your “Tracking Product Review Submission Action” include:\n\n- product_name\n- product_sku\n- product_price\n- product_category\n- product_url\n- product_category\n- review_number\n- review_url\n- review_rating\n\nOnce you’ve decided which properties matter most to you, customize the code snippet like the example below:\n\n**Tracking Product Review Submissions Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('submit product review', {\\n product_name: 'iPhone 7 Plus',\\n product_price: 799.99,\\n product_sku: 'A5343S',\\n product_url: 'https://mystore.com/products/iphone-7-plus',\\n product_category: 'Mobile devices & Accessories',\\n review_url: 'https://mystore.com/products/iphone-7-plus/reviews/412',\\n review_number: 413,\\n review_rating: 5\\n});\",\n \"language\": \"text\"\n }\n ]\n}\n[/block]\n### Tracking Campaigns with UTM Tags\n\nIf you spend a significant amount of time posting to social media, running AdWords campaigns or sharing content – you’re driving traffic from hundreds of different URLs a day. But, how do you know which social media posts drove the most traffic? Can you quickly see which campaigns drove the most conversions over time?\n\nUsing UTM parameters, you can compare the performance of campaigns from different mediums and channels and measure over time.\n\nA UTM tag will answer questions such as:\n\n- Where are my visitors are coming from?\n- How are they finding me?\n- What happens after they engage with my campaign?\n\nOnce you have the basic Woopra Javascript tracking snippet installed on your website, Woopra will automatically begin tracking utm_tags for you. You can then set up Journeys and Trends reports to monitor and measure campaign effectiveness by campaign name, source, content, etc.\n\nFor example, the below Journey report shows me how many users came to Woopra through a campaign, sorted by campaign name and the actions they took after.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/277cb8e-Campaign-Conversions-ecommerce.png\",\n \"Campaign-Conversions-ecommerce.png\",\n 2278,\n 1358,\n \"#fafbfd\"\n ]\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Learn more about [UTM parameters and how to leverage them in Woopra!](https://blog.woopra.com/what-are-utm-parameters-and-how-should-you-use-them-e2257fd0a201)\"\n}\n[/block]\n### Tracking Product Search Actions\n\nUsers searching on your website can offer insight into popular products, product categories and frequently asked questions. Leveraging this data will allow you to personalize their experience and provide the most relevant experience possible. Customize the below tracking snippet to send product search events from your website to Woopra.\n\nInclude properties such as:\n\n- keyword\n- total_results\n\nThe total number of results found is important because you’ll want to analyze what people are searching for. This allows you to find gaps between product offerings and understand if visitors are unable to find products they’d like to purchase.\n\n**Tracking Product Search Actions Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('product search', {\\n keyword: 'iphone',\\n total_results: 12\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Including the number of search results will allow you to segment searches where users didn’t find any results. This tells you where there might be gaps in your content. It’s also an opportunity to reach out directly and provide an answer or automate an email campaign to provide additional assistance.\"\n}\n[/block]\n### Tracking Live Chat Actions\n\nOne of your main objectives is to get the user to identify themselves on your marketing website. A common strategy is to provide a frictionless, live chat feature.\n\nIf you’re using one of [Woopra’s Integrations partners](https://www.woopra.com/appconnect/) for chat, simply navigate to Integrations in your Woopra instance and install the integration. If not, see the below code snippet as an example of how to track live chat actions.\n\n**Tracking Live Chat Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.identify({\\n name: \\\"Name of User\\\",\\n email: \\\"[email protected]\\\",\\n phone: \\\"user phone number\\\"\\n});\\n \\nwoopra.track(\\\"start_chat\\\");\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nOnce you begin tracking this data, it will automatically populate in the user’s profile in Woopra. You can then begin to measure the impact that chat has on driving conversions and overall customer success.\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Read [“How to Generate Leads with Data and Live Chat”](https://blog.woopra.com/how-to-generate-leads-with-data-and-live-chat-e8a43164ae5a) for additional guidance and tips!\"\n}\n[/block]\n### Tracking Signup Actions\n\nEvery eCommerce company should track customer and user signups. They’re a crucial indicator of traction and allow you to nurture customer relationships over time. For example, you should measure how many people signup to make a purchase on your website vs. how many continue to checkout as a guest. Properties that you can send along with a signup event might include:\n\n- Email address\n- Name\n- Username\n- Shipping Address\n\nAs well as any other fields relevant to your business that you’re collecting during signup. For example, a clothing store might also want to include a user’s size details and any personal preferences.\n\nThe most important property to send with the signup action is the user’s email address. This is what allows you to identify the visitor and [track them across multiple devices](https://www.woopra.com/user-tracking/) (e.g. laptop, iPhone, work computer, etc).\n\nTo track these signup actions, you can define the action name string and the properties associated with that action object, as shown below.\n\n**Tracking Signup Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track(\\\"signup\\\", {\\n name: “John Doe”,\\n username: \\\"johndoe\\\",\\n email: “[email protected]”,\\n address: \\\"XYZ Avenue\\\"\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nThe code above will track a custom action titled “signup” with the additional information of the account created.\n\nPassing these events into Woopra will automatically show the information being sent in real-time on the user profiles and you can start to run custom reporting and funnels. For example, you could measure the number of signups by location to understand if your brand is gaining more traction in one area of the world than another.\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Actions and properties should always be lowercase!\"\n}\n[/block]\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/a99d4da-Campaign-Conversions-countries.png\",\n \"Campaign-Conversions-countries.png\",\n 2278,\n 1372,\n \"#fafbfd\"\n ]\n }\n ]\n}\n[/block]\n### Tracking Logon Actions\n\nHow often do users login to your application? Who is logging on and what actions do they take next? Tracking login actions will answer these questions and help you understand how often successful users login, the authentication methods used and more!\n\nHaving this data gives you the ability to calculate conversions and identify your most engaged customers! Work with your developer to have logon events sent to Woopra.\n\nHere’s an example of what the code will look like:\n\n**Tracking Logon Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\n// Send at least the email address to Woopra in case the user is logging\\n// in from a different device. Woopra prefers \\\"emails\\\" over \\\"cookies\\\".\\nwoopra.identify({\\n email: \\\"[email protected]\\\"\\n})\\nwoopra.track(\\\"login\\\");\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Profile Update Actions\n\nWhen a user updates their profile information on your website, you’ll want to track this information in Woopra. Send it as a ‘profile update’ event, and include any of the fields that are relevant to your user profiles. This could include when they update their preferred type of payment, mailing address, email and so on! See the below example for reference.\n\n**Tracking Profile Update Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.identify({\\n fname: \\\"First name\\\",\\n lname: \\\"Last name\\\",\\n});\\n \\nwoopra.track(\\\"profile update\\\");\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Add Payment Method Actions\n\nSee how many visitors add a payment method before checkout by tracking the “Add Payment Method” event. Be sure to include the “type” as a property to understand which payment methods are the most popular!\n\n**Tracking Add Payment Method Actions Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('add payment method', {\\n type: 'Visa'\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Discount/Promo Actions\n\nUnderstand which promotions are used the most frequently to optimize promotional campaigns and measure their success! Include the below properties with your event:\n\n- coupon_code\n- valid (true or false)\n\n**Tracking Discount/Promo Actions Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('apply coupon', {\\n coupon_code: 'SUMMER16',\\n valid: true\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nSending properties with your events is extremely important because it gives you a lot more capability to analyze your data in different ways and ultimately answer more complex questions.\n\n### Tracking Checkout Actions\n\nIt’s essential to track when customers checkout. You can leverage this data throughout Woopra in your reporting to measure and monitor success! Whenever a user checks out, you’ll want to send properties such as payment amount and what product the payment was for. Properties to include along with this event include:\n\n- total_items\n- discount_amount\n- tax_amount\n- shipping_amount\n- total_amount\n- order_id\n\n**Tracking Checkout Actions Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('checkout', {\\n total_items: 3,\\n discount_amount: 0,\\n tax_amount: 154.23,\\n shipping_amount: 12.95,\\n total_amount: 1430.43,\\n order_id: '22bksmkdz4m9ds'\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Item Checkout Actions\n\nWhen tracking customer checkouts, you should also track the itemized checkout to understand the actual sales for every product. For example, if the checkout includes one iPhone and two iPhone cases, you’ll want to track each of those items separately so that you can study sales by product item and category.\n\nInclude event properties such as:\n\n- product_name\n- product_price\n- product_sku\n- product_category\n- product_url\n- quantity\n\n**Tracking Item Checkout Actions Code Example**\n\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('item checkout', {\\n product_name: 'iPhone 7 Plus',\\n product_price: 799.99,\\n product_sku: 'A5343S',\\n product_url: 'https://mystore.com/products/iphone-7-plus',\\n product_category: 'Mobile devices & Accessories', \\n quantity: 1 \\n});\\n \\nwoopra.track('item checkout', {\\n product_name: 'iPhone 7 Plus Case',\\n product_price: 49.95,\\n product_sku: 'B4723CV',\\n product_url: 'https://mystore.com/products/iphone-7-plus-case',\\n product_category: 'Mobile devices & Accessories',\\n quantity: 2\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Use Stripe for payment processing? Even better! We’ve built a custom integration with Stripe to make payment tracking seamless. Simply install the integration and let Woopra do the work!\"\n}\n[/block]\n### Tracking Subscription Actions\n\nMany eCommerce companies now offer subscriptions for their products. Think of companies like DailyLook, TruBrain and Stich Fix. If you’re an eCommerce company with a subscription model, it’s important to measure new subscriptions, it’s equally important to measure subscription changes over time to keep a pulse on the health of your customer base.\n\nYou can drill down based on any available metrics such as geolocation, campaigns, lead sources, platforms, and more! Tracking subscription actions in Woopra will allow you to answer essential questions such as:\n\n- What are my highest and lowest performing customer segments?\n- At what point are customers likely to churn?\n- How often do people engage with my product (or take any action) after becoming a customer?\n\nEvery time a customer subscription is created, modified, or canceled, you can send an action called “subscription update” to Woopra with the following properties:\n\n- **old acv:** The previous ACV value of the subscription.\n- **new acv:** The new ACV value of the subscription.\n- **delta:** The difference between previous ACV and new ACV.\n\nFor example, let’s say a customer upgrades from a $99/month (ACV $1,188) package to a $199/month (ACV $2,388) package. The resulting increase in your ARR (Annual Recurring Revenue) is your ACV delta, which is $1,200 in this example.\n\nTo begin tracking subscription actions, follow the same steps to defining your action name string and the properties associated with the action object. Adding the above-mentioned properties, your javascript string will look like this:\n\n**Tracking Subscription Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"subscription update\\\", {\\n \\\"old acv\\\": 1188.0,\\n \\\"new acv\\\": 2388.0,\\n \\\"delta\\\": 1200.0,\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n- If the customer is creating the subscription for the first time, the old ACV is 0\n- If the customer is downgrading the subscription, the old ACV is higher than new ACV and the delta is negative\n- If the customer is canceling their subscription, the new ACV is 0 and the delta is negative\n\nOnce you begin sending subscription actions to Woopra, navigate to your schema setup and customize the property types, key, aggregation and description. This will allow you to personalize how these events are displayed and seamlessly leverage the data across Woopra.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/2fbf28d-Schema-Subscription-Update.png\",\n \"Schema-Subscription-Update.png\",\n 2424,\n 1176,\n \"#f8f7fa\"\n ]\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** To learn more about measuring subscription changes in Woopra, check out [this blog post!](https://blog.woopra.com/how-to-measure-subscriptions-churn-with-woopra-6060d61e4e9d) Or, for a deep dive into the Woopra schema setup and different ways it can be customized, [read this post!](https://blog.woopra.com/why-we-built-a-customizable-woopra-schema-96952f4e87)\"\n}\n[/block]\n##Other Important eCommerce Actions to Track\n\n### Tracking Error and Issue Actions\n\nWhether we like it or not, issues and problems occur! Be prepared by tracking the errors that users experience. This will help you build a better product and will arm your customer success team with data to help them provide better service and support. For example, if a user receives a form error, you could submit the action below:\n\n**Tracking Error Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"form error\\\", {\\n form: \\\"signup form\\\",\\n error: \\\"Email already registered\\\"\\n});\\n \\nwoopra.track(\\\"form error\\\", {\\n form: \\\"login form\\\",\\n error: \\\"Wrong username or password\\\"\\n});\\n \\nwoopra.track(\\\"app error\\\", {\\n app_version: \\\"1.2\\\",\\n error_code: 500,\\n error: \\\"Failed to download resource A\\\"\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Server Side Actions\n\nServer side events can be useful especially when those events are performed on behalf of the user. Here are some events that you should consider tracking:\n\n### Tracking Order Shipped Actions\n\nIt’s important to track when a customers order has successfully shipped! You can leverage this data to automate email campaigns when the item has arrived and to assist customers experiencing issues. Include properties such as:\n\n- order_id\n- shipping_method\n- days (days until delivered)\n\n**Tracking Order Shipped Actions Code Example**\n\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('product shipped', {\\n order_id: '22bksmkdz4m9ds',\\n shipping_method: 'FedEx',\\n days: 5\\n})\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Refund Actions\n\nEqually important as when an item ships is tracking when an item is refunded, returned or exchanged. Be sure to include the “amount” as a property in this event such as below:\n\n- amount\n\n**Tracking Refund Actions Code Example**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track('issue refund', {\\n amount: 344.95\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Email Actions\n\nIt’s important for marketers, sales and customer support teams to track when users open, receive and click on emails. Woopra integrates with most of the popular email marketing platforms to make email tracking a breeze. Track email events and update lead lists automatically!\n\nFor example, the [Marketo app](https://www.woopra.com/appconnect/marketo) will track Marketo actions such as an email is sent, or when a user opens and clicks on it. These actions are tracked, sent to Woopra, and included in the Woopra Profile.\n\nIn addition, you’ll have [Trends Reports](doc:trends) reflecting these events. For example, you may want to analyze which emails had the most opens among customers in California. Or, you may want to build a [Journey Report] report showing where people drop off on the path to conversion after they come from an email campaign – and ultimately what impact their email marketing is having on conversion.\n\nYou can also set up [automations](https://docs.woopra.com/docs/triggers) to automatically send new leads to your email marketing software or update existing lead records. For example, if someone signs up on your website, you can set up a Trigger to automatically send the lead’s information to Hubspot and a new Hubspot Lead will be created. If they change their company information, later on, those fields will be updated in their Hubspot Lead record.\n\nWant to use all this data in Woopra to update your email marketing lists based on user behavior? This functionality is also built into our integrations. For example, you could update your MailChimp List for “Ready to Buy” users whenever a user adds an item to their cart, enters their shipping information and adds a credit card to their profile!\n\nPick your email platform below to learn more about each integration:\n\n- [Marketo](https://www.woopra.com/appconnect/marketo)\n- [Hubspot](https://www.woopra.com/appconnect/hubspot)\n- [MailChimp](https://www.woopra.com/appconnect/mailchimp)\n- [SendGrid](https://www.woopra.com/appconnect/sendgrid)\n- [Eloqua](https://www.woopra.com/appconnect/eloqua)\n- [Mandrill](https://www.woopra.com/appconnect/mandrill)\n- [Campaign Monitor](https://www.woopra.com/appconnect/campaignmonitor)\n- [Customer.io](https://www.woopra.com/appconnect/customerio)\n- [Mailgun](https://www.woopra.com/appconnect/mailgun)\n\n\n### Tracking Support Ticket Actions\n\nAre users who submit support requests more or less likely to convert? What impact do certain product features have on support tickets? Do well-answered support tickets drive conversions? Find all of this out and more by integrating with one of our customer support tools!\n\nWoopra integrates with Zendesk, Freshdesk and a few others. Track when users submit tickets and track when they get resolved. This is helpful to study the attribution of your customer success team to the retention of your customers.\n\nPick your support tool below to learn more:\n\n- [Zendesk](https://www.woopra.com/appconnect/zendesk)\n- [Freshdesk](https://www.woopra.com/appconnect/freshdesk) \n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** [Learn how User Data Leads to Better Customer Service!](https://www.livechatinc.com/blog/how-user-data-leads-to-better-customer-service/)\"\n}\n[/block]\n### Tracking NPS Score Actions\n\nAre you collecting valuable NPS data from your customers? Track this data in Woopra to build audiences of promoters and detractors. Integrating with [Delighted](https://www.woopra.com/appconnect/delighted) will allow you to automatically see NPS survey results on profiles on Woopra. You can trigger personalized emails to re-engage detractors or send a special offer to your promoters!\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Check out [this post](https://blog.woopra.com/new-in-appconnect-bellgram-and-delighted-75788e41083f) for more tips on leveraging NPS data in Woopra!\"\n}\n[/block]\n### Tracking Phone Call Actions\n\nHow do phone calls impact revenue? How many customers make a call to your team prior to purchasing? Are certain support team members better at handling customer calls than others? Find all of this out, and more, by leveraging phone call data in Woopra! Woopra integrates with [Bellgram](https://www.woopra.com/appconnect/bellgram) and [Ringostat](https://www.woopra.com/appconnect/ringostat) to seamlessly track phone call events.\n\nThese events will attach to your Woopra profiles so that you can instantly see if a customer has tried to reach you via phone, who they spoke to, any notes regarding the call and more!\n\nLeveraging Woopra’s segmentation capabilities, you can build Journeys and Trends Reports to determine if phone calls impact a user’s likelihood to purchase or churn. Further drilling down to the representative level, allows you to identify employees that are successfully handling support or sales calls and who could use some help!","excerpt":"The Ultimate Action Tracking Setup Guide: eCommerce Edition","slug":"ecommerce-tracking","type":"basic","title":"eCommerce Tracking","__v":0,"parentDoc":"5b15a4ac34eb070003426a6d","updatedAt":"2020-10-23T03:12:45.726Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false},{"_id":"5cf99eec086c4401e48dde37","version":"5b070ce4060bee00035d8d12","updatedAt":"2020-08-30T16:24:30.689Z","createdAt":"2019-06-06T23:17:00.140Z","project":"58b721a1f22b830f009a0bcd","category":"5d0157e5dba6ec001c22b539","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":1,"body":"##Important Metrics and KPIs\nIn eCommerce, increasing sales is among the top KPIs for your business, obviously. But what goes into sales numbers and how can we increase conversions? What metrics should we be looking at and what reports will help us achieve that goal? Let's take a look at some useful reports we can build in Woopra that can give us insight on what drives sales and how we make better data driven decisions.\n\n##Tracking the Conversion Journey\nTypically for e-com, users will go through a process of coming to your site, viewing products, adding them to a cart, and then checking out. Simple enough, but there is a lot that can go into this process and there's a lot of data we can extract. \n\nOne thing we can do to find out more is to build out a Journey report to get data on this process. Let's take a look at an example of how we can build this. Say we have an e-com site that sells electronics. \n\nLet's take a look at this example Journey and how we went about building it:\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/4dc5a37-Image_2019-06-14_at_3.37.10_PM.png\",\n \"Image 2019-06-14 at 3.37.10 PM.png\",\n 1938,\n 704,\n \"#f2eef3\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n**Step 1** - Add a page view for our landing page. This will get all the users who came to our site.\n\n**Step 2** - Focus on a specific category like TVs, computers, or cell phones. We could also break this down into different parallel steps if we wanted to list out each category. We can filter on the Pageview event and configure it where the uri contains /tvs.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/b3f695e-Image_2019-06-11_at_2.20.29_PM.png\",\n \"Image 2019-06-11 at 2.20.29 PM.png\",\n 1478,\n 1098,\n \"#edeff9\"\n ]\n }\n ]\n}\n[/block]\n**Step 3** - Filter on the most popular products. We can create the next step in a similar way, but this time we'll use a dynamic step. I'll select the pageview event again, change this to a dynamic step, and breakdown the report by 'title'. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/d05e7e0-Image_2019-06-14_at_3.40.48_PM.png\",\n \"Image 2019-06-14 at 3.40.48 PM.png\",\n 1214,\n 1110,\n \"#edeff6\"\n ]\n }\n ]\n}\n[/block]\n**Step 4** - Select your cart actions that you are tracking. We'll create a flow of the various cart actions that include, 'cart created', 'cart updated' (optional step if they update or add more items), and 'paid order' all in different steps.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/8873942-Image_2019-06-14_at_3.44.22_PM.png\",\n \"Image 2019-06-14 at 3.44.22 PM.png\",\n 1228,\n 1026,\n \"#ebf1f8\"\n ]\n }\n ]\n}\n[/block]\nWhen we run this report we can see a complete Journey of the purchasing process broken down by a cohort of days.\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/821bf48-Image_2019-06-14_at_3.45.11_PM.png\",\n \"Image 2019-06-14 at 3.45.11 PM.png\",\n 3126,\n 2530,\n \"#f8f5f7\"\n ]\n }\n ]\n}\n[/block]\n###What insights can we gather from this report?\n####Re-engagement \nNow that we have this data, we can see how many sales we're making, what our conversion rates look like, and which products are performing the best. We can even drill down into the dropped list on the second to last step to download a list of the users who didn't make a purchase. This could be really useful to your marketing department if they wanted to reengage these users by sending them some promo code. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/90cf6a9-Image_2019-06-14_at_3.49.04_PM.png\",\n \"Image 2019-06-14 at 3.49.04 PM.png\",\n 2628,\n 714,\n \"#f4f1f5\"\n ]\n }\n ]\n}\n[/block]\n####Triggers and Automation\nAdditionally, if you have one of our mail integrations like [MailChimp](doc:mailchimp), we could even set up [Triggers](doc:triggers) ] to add users to lists when they perform specific actions. For example, we could use triggers to add users to a specific list if they viewed a specific item. \n\n####Improving Funnel Conversions\nFrom this report, we can also learn which products are our top performing. We could even make additional Journey reports focusing on specific products or categories to get a more micro view on the Journey. This can bring some useful insight to help drive sales. If we know what our top performing products are, we could change our marketing and website to highlight these items and drive more sales.\n \n##Tracking Subscriptions and Churn\nOften, e-com companies might have a subscription model for certain products or some kind of discount club. Using a [Cohort](doc:cohort) report, we can monitor the health of our subscriptions and churn. \n**Step 1** - Select your timeframe and initial action such as a subscription signup event. You can add constraints as well if you want to focus in on a specific subscription tier or plan as well.\n\n**Step 2** - Select your repeat action which is the subscription pay event. \n\n**Step 3** - Select your metric. We can count visitors to see the number of subscribers.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/1dbb93f-Image_2019-06-11_at_3.02.42_PM.png\",\n \"Image 2019-06-11 at 3.02.42 PM.png\",\n 1218,\n 942,\n \"#f8f5f6\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n###What insights can we gather from this report?\n####Churn Monitoring and Benchmarking\nNow that we have this data, we can look at the report below and this will give us a clear view of churn and renewed subscriptions. \n\nWe can see how many subscriptions are created each month, and how many continue to renew their subscriptions. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/0e25a10-Image_2019-06-11_at_3.04.03_PM.png\",\n \"Image 2019-06-11 at 3.04.03 PM.png\",\n 3492,\n 2762,\n \"#f8f8f9\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n###Sales and Subscriptions Ammounts\nWith a simple change to our configuration We can change this report to show total sales numbers and ammounts.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/f5561ed-Image_2019-06-12_at_11.56.33_AM.png\",\n \"Image 2019-06-12 at 11.56.33 AM.png\",\n 528,\n 102,\n \"#f4f2f3\"\n ],\n \"caption\": \"When we change the metric to 'sum of total', we can see a revenue and subscription report with total amounts.\"\n }\n ]\n}\n[/block]\n##Campaign Tracking Journey\nAnother important aspect to conversions and sales is to find out which campaigns are working the best. For this, we highly advise the use of [UTM tags](doc:campaign-tracking) for any incoming links.\n\nWoopra will automatically track this data so you can build out reports based on specific campaigns. We can create a Journey report to see which ones are performing the best. \n\n**Step 1** - Add parallel steps where the action is the Page View event. Each parallel step will filter on the specific campaign name. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/f81c466-Image_2019-06-11_at_3.31.20_PM.png\",\n \"Image 2019-06-11 at 3.31.20 PM.png\",\n 1404,\n 1082,\n \"#eceef8\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n**Step 2** - The next step will simply be the checkout event. Once we run the report, we can easily see which campaigns are driving the most conversions.\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/b9c4ddb-Image_2019-06-11_at_3.33.33_PM.png\",\n \"Image 2019-06-11 at 3.33.33 PM.png\",\n 2938,\n 2012,\n \"#f6f2f9\"\n ]\n }\n ]\n}\n[/block]\n###What insights can we gather from this report?\n####Best Marketing Channels \nThis report will show us the overall number of people that are coming to your site and then buying a product. We can use this info to help us determine which marketing avenues are working the best so we can spend more on those campaigns to drive more traffic and sales. \n\n#Facebook/Adwords Order Tracking Trends\nWe can dive even deeper and find out how specific campaigns are doing. We can even attribute each order with a campaign if we are using UTM tags and campaign tracking. \n\n**Step 1** - In our Trend Report, we'll first filter on a specific segment of users. We want to see only users where their 'first campaign source' contains 'facebook' and 'facebookads'. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/176c79c-Image_2019-06-12_at_3.16.40_PM.png\",\n \"Image 2019-06-12 at 3.16.40 PM.png\",\n 1024,\n 506,\n \"#dce1f5\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n **Step 2** - Next we'll select our action which is our Checkout event.\n\n **Step 3** - Lastly, we'll select what we want to compare by. Here we have order_id, email, first campaign source, and the total.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/5bfb010-Image_2019-06-12_at_3.17.00_PM.png\",\n \"Image 2019-06-12 at 3.17.00 PM.png\",\n 2516,\n 2480,\n \"#f7f5f8\"\n ]\n }\n ]\n}\n[/block]\n###What insights can we gather from this report?\n####Campaign Performance \nHere we have really useful information on how our Facebook ads are doing. We can create similar reports for other campaign sources as well, then we can see which orders are attributed to which campaigns. Again, if we're in marketing, this is super valuable info. We can clearly see who is ordering what, and which Facebook campaign drove the most sales. \n\n\n##Order Lists and Reports\nLastly, we can build out a report to see all the recent orders.\n\n**Step 1** - First we'll select our timeframe and action. We want a list of recent orders so we'll use our 'product purchased' event.\n\n**Step 2** - Next we'll add the relevant columns. We can use timestamp(by default), email, name, product_name, product_qty, and product_price.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/5693496-Image_2019-06-12_at_3.30.22_PM.png\",\n \"Image 2019-06-12 at 3.30.22 PM.png\",\n 2476,\n 612,\n \"#f7e8f2\"\n ]\n }\n ]\n}\n[/block]\n###What insights can we gather from this report?\n####See All Your Orders\nThis report is great for a straight list of orders and who made them. If we export this list, we can find out which products are selling the most. This can give us a general overview of popular products so we can focus on supply and demand changes. We could even use this list to email users that purchased a certain product and ask for reviews or product feedback. \n\n##Expore Your Data\nI hope these examples give you some ideas about the reports you can build and the types of questions you can answer. We encourage you to explore your data and experiment with the different reports because you never know what important trends or metrics you might uncover.","excerpt":"","slug":"ecommerce-report-examples","type":"basic","title":"eCommerce Report Examples","__v":0,"parentDoc":"5b15a4ac34eb070003426a6d","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false},{"_id":"5b15bb4ff68d3a0003009dbe","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5d0157e5dba6ec001c22b539","parentDoc":"5b15a4ac34eb070003426a6d","user":"5adfa297452bd900036d0f67","updates":["5c3fb9ee698b9a0050a6e2fd"],"next":{"pages":[],"description":""},"createdAt":"2018-06-04T22:21:03.130Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":2,"body":"[block:embed]\n{\n \"html\": \"<iframe class=\\\"embedly-embed\\\" src=\\\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FwkfXDpQEmqo%3Ffeature%3Doembed&url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DwkfXDpQEmqo&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FwkfXDpQEmqo%2Fhqdefault.jpg&key=f2aa6fc3595946d0afc3d76cbbd25dc3&type=text%2Fhtml&schema=youtube\\\" width=\\\"854\\\" height=\\\"480\\\" scrolling=\\\"no\\\" frameborder=\\\"0\\\" allow=\\\"autoplay; fullscreen\\\" allowfullscreen=\\\"true\\\"></iframe>\",\n \"url\": \"https://www.youtube.com/watch?v=wkfXDpQEmqo\",\n \"title\": \"SaaS Tracking Guide - Part 1 of 2\",\n \"favicon\": \"https://s.ytimg.com/yts/img/favicon-vfl8qSV2F.ico\",\n \"image\": \"https://i.ytimg.com/vi/wkfXDpQEmqo/hqdefault.jpg\"\n}\n[/block]\n## The Ultimate Action Tracking Setup Guide: SaaS Edition\n\nWe wrote a post featuring Best Practices for Custom Event Collection to help new Woopra users get started with the fundamentals of tracking their customer data.\n\nWhile this was an excellent place to kick-off, it’s important to remember that every industry and vertical is unique. For example, an eCommerce company will want to track different actions than a Mobile Gaming or Travel company, and so on. To help guide you through this process, we’ve gone a step further and put together tips and best practices by industry. So, without further ado, here is: **The Ultimate Tracking Setup Guide: SaaS Edition.**\n\n## Identifying Key Customer Lifecycle Moments for SaaS\n\nThree years ago, [Forrester reported](https://www.forrester.com/report/Back+Up+Your+Critical+Cloud+Data+Before+Its+Too+Late/-/E-RES107761) that by 2016, the average company would be using 66 different SaaS applications! Each of these applications, from your marketing automation software to your CRM, houses unique engagements and actions taken by users. When pieced together, they reveal the total customer experience and enable you to optimize and engage with customers like never before.\n\nWhile all organizations are different, nearly all SaaS companies are heavily reliant on key moments in the customer lifecycle that fuel their success and growth. These include marketing website actions, signups, subscriptions, free trials, onboarding, usage, retention and upsells. In this guide, we’ll walk through how to track and measure each of these moments in Woopra.\n\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"Keep in mind that the help of a developer will be required to code the custom actions you’d like to track. But, by using this guide, you’ll be able to outline the key actions first to **significantly cut down on implementation and development time!**\"\n}\n[/block]\n## Tracking Marketing Website Actions\n\n### Tracking Anonymous Website Traffic\n\nWoopra is designed to track unique, unidentified website and mobile app users from their first touch. The user is assigned a unique ID and all of their anonymous activity is tracked in the customer profile. You’ll also have data regarding the user’s location, system, platform, referrer (if applicable) and more!\n\nOnce the user is identified – through signing up, subscribing, or a similar activity – all previous anonymous activity will be merged into the same [Profile](https://docs.woopra.com/docs/profiles). This provides a complete picture of the full lifecycle for every user, starting with the first touch.\n\nTo start tracking anonymous website traffic:\n\n- Customize the domain name in the snippet below.\n- Copy and paste the Woopra [Javascript tracking code](https://docs.woopra.com/reference#intro-javscript-sdk) into the head section of your website pages.\n- Ensure the code is pasted into every page of your site that you’d like to track.\n\n**Woopra Javascript Tracking Code**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\n!function(){var a,b,c,d=window,e=document,f=arguments,g=\\\"script\\\",h=[\\\"config\\\",\\\"track\\\",\\\"trackForm\\\",\\\"trackClick\\\",\\\"identify\\\",\\\"visit\\\",\\\"push\\\",\\\"call\\\"],i=function(){var a,b=this,c=function(a){b[a]=function(){return b._e.push([a].concat(Array.prototype.slice.call(arguments,0))),b}};for(b._e=[],a=0;a<h.length;a++)c(h[a])};for(d.__woo=d.__woo||{},a=0;a<f.length;a++)d.__woo[f[a]]=d[f[a]]=d[f[a]]||new i;b=e.createElement(g),b.async=1,b.src=\\\"//static.woopra.com/js/w.js\\\",c=e.getElementsByTagName(g)[0],c.parentNode.insertBefore(b,c)}(\\\"woopra\\\");\\n \\n// configure tracker\\nwoopra.config({\\n domain: \\\"mybusiness.com\\\"\\n});\\n \\n// track pageview\\nwoopra.track();\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nBy placing this snippet on your website pages, you’ll instantly see Woopra displaying website activity into the platform. This is the essential first step to tracking and sets the foundation for future actions.\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** If you’re hosting your website on WordPress, you don’t need to install the Javascript snippet to track website activity. Simply, install the [Woopra WordPress integration](https://wordpress.org/plugins/woopra/) and the tracking code will automatically be added!\"\n}\n[/block]\n### Tracking Blog Actions\n\nHow do you know what types of content perform better than others? Are users who read a blog post more likely to convert to paying customers?\n\nTrack your blog activity to measure blog attribution, inform future blog post topics and measure engagement. You can leverage this data in reporting and funnels to optimize engagement.\n\nFor example, the below ‘Blog Attribution’ Customer Journey shows how many people read a blog post and then went on to take other actions in my product and on my website.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/0097f1f-Journey-Blog.png\",\n \"Journey-Blog.png\",\n 1865,\n 680,\n \"#f7f9fd\"\n ]\n }\n ]\n}\n[/block]\nTo track your blog activity, provide the below example to your developer.\n\n**Blog Tracking Code Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"article view\\\", {\\n title: \\\"Blog post title\\\",\\n url: \\\"https://blog.companya.com/we-are-awesome\\\",\\n author: \\\"John Smith\\\",\\n category: \\\"News\\\",\\n published_on: 125234234234 // timestamp\\n})\\n \\n// You may track when users leave comments as well:\\nwoopra.track(\\\"article comment\\\", {\\n comment: \\\"Great article\\\"\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Check out [this article](http://www.marketingprofs.com/articles/2016/31239/how-to-use-customer-insight-to-create-better-content?adref=nlt120816&utm_content=45777337&utm_medium=social&utm_source=twitter) to learn how to leverage customer insight to fuel content decisions!\"\n}\n[/block]\n### Tracking Contact Forms\n\nIt’s important to track when users identify themselves and reach out regarding experiences with your site, your support or transactions. This could include:\n\n- Downloading a White Paper\n- Downloading an eBook\n- Submitting a Demo Request Form\n- Registering for a Webinar\n- Submitting a Contact Request form\nand so on!\n\nFor a marketer, this information can help you measure the effectiveness of your efforts and allow you to optimize areas for improvement. You can also tie these marketing efforts directly back to ROI by measuring how many users signup for your product or become a customer after engaging with your content.\n\nTo track contact form submissions, ask your developer to customize the below code snippet for each of your contact forms:\n\n**Tracking a Demo Request Form Example:**\n\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.identify({\\n name: \\\"Name of user\\\",\\n email: \\\"[email protected]\\\",\\n company: \\\"CompanyX, Inc.\\\"\\n});\\nwoopra.track(\\\"demo request\\\", {\\n subject: \\\"Technical Demo\\\",\\n message: \\\"We would love to get a demo this week\\\"\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nOnce setup, the information will display on the user’s Woopra Profile and you can begin to segment, build customer journeys and leverage the data in your reporting!\n\n### Tracking Video Play Events\n\nIf you have a promo video on your homepage or instructional videos throughout your site, you’ll want to track when users play your video content. Customize the below tracking snippet to begin sending and measuring video engagement data in Woopra:\n\n**Tracking a Video View:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"play video\\\", {\\n title: \\\"Title of the video\\\",\\n videoId: \\\"1SF3sx\\\",\\n url: \\\"https://companya.com/promo/\\\"\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Using Google Tag Manager? Here’s a [cool tutorial for tracking YouTube videos in Woopra](http://moometric.com/integrations/woopra/track-youtube-video-views-in-woopra-using-gtm/) using GTM!\"\n}\n[/block]\n### Tracking Campaigns with UTM Tags\n\nIf you spend a significant amount of time posting to social media, running AdWords campaigns or sharing content – you’re driving traffic from hundreds of different URLs a day. But, how do you know which social media posts drove the most traffic? Can you quickly see which campaigns drove the most conversions over time?\n\nUsing UTM parameters, you can compare the performance of campaigns from different mediums and channels and measure over time.\n\nA UTM tag will answer questions such as:\n\n- Where are my visitors are coming from?\n- How are they finding me?\n- What happens after they engage with my campaign?\n\nOnce you have the basic Woopra Javascript tracking snippet installed on your website, Woopra will automatically begin tracking utm_tags for you. You can then set up Journeys and Trends reports to monitor and measure campaign effectiveness by campaign name, source, content, etc.\n\nFor example, the below Journey report shows me how many users came to Woopra through a campaign, sorted by campaign name and the actions they took after.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/d31f8ba-Campaign-Conversion-Journey-.png\",\n \"Campaign-Conversion-Journey-.png\",\n 2280,\n 1340,\n \"#f9fbfd\"\n ]\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Learn more about [UTM parameters and how to leverage them in Woopra!](https://blog.woopra.com/what-are-utm-parameters-and-how-should-you-use-them-e2257fd0a201)\"\n}\n[/block]\n### Tracking Internal Website Searches\n\nUsers searching on your website can offer insight into popular content and frequently asked questions. Leveraging this data will allow you to personalize their experience and provide the most relevant content possible. Customize the below tracking snippet to send internal search actions from your website to Woopra.\n\n**Tracking Internal Search Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"search\\\", {\\n query: \\\"campaign tracking\\\",\\n url: \\\"https://www.woopra.com/docs/\\\",\\n results: 14\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Including the number of search results will allow you to segment searches where users didn’t find any results. This tells you where there might be gaps in your content. It’s also an opportunity to reach out directly and provide an answer or automate an email campaign to provide additional assistance.\"\n}\n[/block]\n### Tracking Live Chat Actions\n\nOne of your main objectives is to get the user to identify themselves on your marketing website. A common strategy is to provide a frictionless, live chat feature.\n\nIf you’re using one of [Woopra’s Integrations partners](https://www.woopra.com/appconnect/) for chat, simply navigate to Integrations in your Woopra instance and install the integration. If not, see the below code snippet as an example of how to track live chat actions.\n\n**Tracking Live Chat Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\n// Since the user is identifying him or herself, let Woopra know who they are\\nwoopra.identify({\\n name: \\\"Name of User\\\",\\n email: \\\"[email protected]\\\",\\n company: \\\"CompanyX, Inc.\\\"\\n});\\n \\nwoopra.track(\\\"start_chat\\\");\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nOnce you begin tracking this data, it will automatically populate in the user’s profile in Woopra. You can then begin to measure the impact that chat has on driving conversions and overall customer success.\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Read [“How to Generate Leads with Data and Live Chat”](https://blog.woopra.com/how-to-generate-leads-with-data-and-live-chat-e8a43164ae5a) for additional guidance and tips!\"\n}\n[/block]\n### Tracking Signup Actions\n\nEvery SaaS company should track application signups. They are one of the most crucial indicators of traction and must be optimized over time. Properties that you can send along with a signup action might include:\n\n- Email address\n- Name\n- Username\n- Plan/account level\n- Company name\n\nAs well as any other fields relevant to your business that you’re collecting during signup. The most important property to send with the signup action is the user’s email address. This is what allows you to identify the visitor and [track them across multiple devices](https://docs.woopra.com/docs/unique-identifiers-and-profile-merging) (e.g. laptop, iPhone, work computer, etc).\n\nTo track these signup actions, you can define the action name string and the properties associated with that action object, as shown below.\n\n**Tracking Signup Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"signup\\\", {\\n company: \\\"My Business\\\",\\n name: “John Doe”,\\n username: \\\"johndoe\\\",\\n email: “[email protected]”,\\n plan: \\\"Free Trial\\\"\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nThe code above will track a custom action titled “signup” with the additional information of the account created.\n\nPassing these actions into Woopra will automatically show the information being sent in real-time on the user profiles and you can start to build custom Trends and Journeys Reports. For example, you could measure the number of signups by company to understand if your product is expanding across an organization.\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Actions and properties should always be lowercase!\"\n}\n[/block]\n### Tracking Logon Actions\n\nHow often do users login to your application? Who is logging on and what actions do they take next? Tracking login actions will answer these questions and help you understand how often successful users login, the authentication methods used and more!\n\nHaving this data gives you the ability to calculate conversions, success and failure rates. Work with your developer to have login actions sent to Woopra.\n\nHere’s an example of what the code will look like:\n\n**Tracking Logon Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\n// Send at least the email address to Woopra in case the user is logging\\n// in from a different device. Woopra prefers \\\"emails\\\" over \\\"cookies\\\".\\nwoopra.identify({\\n email: \\\"[email protected]\\\"\\n})\\nwoopra.track(\\\"login\\\");\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Profile Update Actions\n\nWhen a user updates their profile information within your application or on your website, you’ll want to track this information in Woopra. Send it as a ‘profile update’ action, and include any of the fields that are relevant to your user profiles. See the below example for reference.\n\n**Tracking Profile Update Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.identify({\\n fname: \\\"First name\\\",\\n lname: \\\"Last name\\\",\\n company: \\\"Company\\\",\\n name: \\\"First Last\\\",\\n});\\n \\nwoopra.track(\\\"profile update\\\");\\n</script>\",\n \"language\": \"text\"\n }\n ]\n}\n[/block]\n### Tracking Payment Actions\n\nIt’s essential to track when customers make payments. You can leverage this data throughout Woopra in your reporting to measure and monitor success! Whenever a user makes a payment, you’ll want to send properties such as payment amount and what service the payment was for.\n\nTrack every time you collect a payment from your customers! For recurring payments, you may need to track server-side events, since the user will not be on the website during renewal.\n\nThe action tracking code will look similar to this:\n\n**Tracking Payment Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"payment\\\", {\\n amount: 500,\\n product: \\\"premium\\\"\\n});\\n</script>\",\n \"language\": \"text\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Use Stripe for payment processing? Even better! We’ve built a custom integration with Stripe to make payment tracking seamless. Simply install the integration and let Woopra do the work!\"\n}\n[/block]\n### Tracking Subscription Actions\n\nSaaS companies live and die by their ARR (Annual Recurring Revenue), MRR (Monthly Recurring Revenue), ACV (Annual Customer Value), and LTV (Lifetime Value). While it’s important to measure new subscriptions, it’s equally important to measure subscription changes over time to keep a pulse on the health of your customer base.\n\nYou can drill down based on any available metrics such as geolocation, campaigns, lead sources, platforms, and more! Tracking subscription actions in Woopra will allow you to answer essential questions such as:\n\n- What are my highest and lowest performing customer segments?\n- At what point are customers likely to churn?\n- How often do people engage with my product (or take any action) after becoming a customer?\n\nEvery time a customer subscription is created, modified, or canceled, you can send an action called “subscription update” to Woopra with the following properties:\n\n- **old acv:** The previous ACV value of the subscription.\n- **new acv:** The new ACV value of the subscription.\n- **delta:** The difference between previous ACV and new ACV.\n\nFor example, let’s say a customer upgrades from a $99/month (ACV $1,188) package to a $199/month (ACV $2,388) package. The resulting increase in your ARR (Annual Recurring Revenue) is your ACV delta, which is $1,200 in this example.\n\nTo begin tracking subscription actions, follow the same steps to defining your action name string and the properties associated with the action object. Adding the above-mentioned properties, your javascript string will look like this:\n\n**Tracking Subscription Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"subscription update\\\", {\\n \\\"old acv\\\": 1188.0,\\n \\\"new acv\\\": 2388.0,\\n \\\"delta\\\": 1200.0,\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n- If the customer is creating the subscription for the first time, the old ACV is 0\n- If the customer is downgrading the subscription, the old ACV is higher than new ACV and the delta is negative\n- If the customer is canceling their subscription, the new ACV is 0 and the delta is negative\n\nOnce you begin sending subscription actions to Woopra, navigate to your schema setup and customize the property types, key, aggregation and description. This will allow you to personalize how these events are displayed and seamlessly leverage the data across Woopra.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/2fbf28d-Schema-Subscription-Update.png\",\n \"Schema-Subscription-Update.png\",\n 2424,\n 1176,\n \"#f8f7fa\"\n ]\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** To learn more about measuring subscription changes in Woopra, check out [this blog post!](https://blog.woopra.com/how-to-measure-subscriptions-churn-with-woopra-6060d61e4e9d) Or, for a deep dive into the Woopra schema setup and different ways it can be customized, [read this post!](https://blog.woopra.com/why-we-built-a-customizable-woopra-schema-96952f4e87)\"\n}\n[/block]\n### Tracking Free Trials and Onboarding\n\nEvery SaaS company will have its own onboarding process with key milestones, all of which should be tracked to monitor and analyze product adoption and usage. This is where you should give a lot of thought to answering the following question:\n\n> What actions must a user take to get value out of my product?\n\nIt helps to pretend to be a new user and go through the signup, implementation, and onboarding process yourself, documenting every critical action along the way. \n\nFor an example, let’s look at Woopra customer, [CloudApp](https://blog.woopra.com/cloudapp-answers-every-essential-business-question-with-woopra-38c916f2d790). CloudApp is a SaaS solution that enables users to capture and share gifs, videos, images and screenshots seamlessly. They’ve outlined what success looks like for new users and track these essential onboarding milestones in a Woopra Journey. For them, these key events include:\n\n- Signup\n- Account Confirmation\n- 1st Screen Drop Created\n- 10th Screen Drop Created\n- Annotation\n- First Screen Recording\n- Added New Team Members\n\nBecause they’re tracking each of these milestones as an event, they can visualize and optimize their onboarding workflow in Woopra. A [Journey](https://docs.woopra.com/docs/journeys), for example, maps out these actions step-by-step, allowing CloudApp to identify any bottlenecks and optimize the user experience for conversions.\n\nAt Woopra, we use similar Journeys for our own reporting every day. One such Journey outlines when users:\n\n- Came to our Landing Page\n- Signup\n- Added a Credit Card\n- Installed the Mobile App\n- Became a Customer\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/e70793a-Campaign-Conversion-Journey-1.png\",\n \"Campaign-Conversion-Journey-1.png\",\n 2280,\n 1340,\n \"#f9fbfd\"\n ]\n }\n ]\n}\n[/block]\nFrom here, we can build micro-journeys that show what users do in between these key moments.\n\nBy tracking each onboarding action, you can analyze, slice and dice your data throughout Woopra. The action activity is being displayed in each customer profile, and it also gives you the ability to see how this action performs over time and what properties are driving its performance\n\nTo begin tracking your onboarding actions in Woopra, outline the milestones that matter most to your organization. These could include actions that users take within your product or other events such as opening an email or communicating with your sales team.\n\nIntegrating your marketing, sales or customer support applications via [our integrations](https://www.woopra.com/appconnect/) will automatically bring the associated app actions into Woopra for analysis throughout the platform. To track actions specific to your product in Woopra, you’ll need to write some custom code. Read on to the next step for guidance on tracking product usage actions.\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Learn more about how to build and optimize an onboarding [Journey!](https://docs.woopra.com/docs/journeys)\"\n}\n[/block]\n### Tracking Product Usage\n\nIt’s great to track when new users signup for your product, but what’s even more important is what happens after they signup. What features are they engaging with? Where are they getting stuck? What does a healthy customer look like in your product? How do you identify users who qualify for an upsell? Tracking the behavior that users take once they’re in your application will allow you to answer all of these questions, and more!\n\nAgain, before deciding the product actions to send to Woopra, you’ll want to start by asking:\n\n> What are the key actions a user takes to get value from my product?\n\nIn addition to your “core” actions, you should also track the actions you would expect to see advanced user’s doing, such as using your more complex features. This will enable you to analyze the behavior of power users and give you clues as to how you can help move your less advanced users along this path.\n\nTracking product usage will be different depending on if you have a Single Page Application (SPA) or a Mobile application. We’ve outlined best practices for both below!\n\n### Tracking Product Actions for a Single Page Application (SPA)\n\nA Single Page Application is a website or web app that loads all of the resources required to navigate throughout the application on the first page!\n\nIt’s important to track the application load_time property for basic monitoring and to see if application load times are impacting conversions or churn. To track this as an action, see the example below.\n\n**Tracking Product Actions for SPA Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"app load\\\", {\\nload_time: 1231 // time in milliseconds\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking When Users Switch Between Views\n\nTrack CRUD operations. The way to think about this is to identify all of the main entities in your project (report, dashboard, widget, song, board, project, etc…) and all the verbs that apply to them (create, view, update, delete, archive, share, etc…). Track all the required combinations of verbs and entities.\n\nFor example, a recruiting company would probably want to track when users create a job listing. So they could track actions for when a user creates a job listing, updates a job listing and archives job listing. The code could look like this:\n\n**Tracking When Users Switch Views Example:**\n\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"create widget\\\", {\\n title: \\\"Widget title\\\",\\n type: \\\"chart\\\",\\n project: \\\"143\\\", // refer to the environment ID if users can have multiple one.\\n custom_feature: \\\"you get the point...\\\"\\n});\\n \\nwoopra.track(\\\"create job listing\\\", {\\n title: \\\"Marketing Intern\\\",\\n department: \\\"marketing\\\"\\n});\\n \\nwoopra.track(\\\"update job listing\\\", {\\n title: \\\"Marketing Associate\\\",\\n department: \\\"marketing\\\"\\n});\\n \\nwoopra.track(\\\"delete widget\\\", {\\n project: \\\"142\\\"\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Product Actions for a Mobile Application\n\nSimilarly to SPAs, mobile applications can have their own custom actions tracked. Follow the same naming convention for verbs and nouns and make sure you’re also tracking mobile.\n\nSome users can get more sophisticated by pushing attribution data to Woopra as campaign properties. For example, you could send a campaign_name tag with your mobile load action when the user opens your app through an advertisement or through another application. The tracking action would look like this:\n\n**Tracking Product Actions for a Mobile Application:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"mobile load\\\", {\\n campaign_name: \\\"July 2017 Promo\\\",\\n campaign_source: \\\"facebook\\\",\\n campaign_medium: \\\"ad\\\"\\n});\\n \\nwoopra.track(\\\"mobile view\\\", {\\n title: \\\"Dashboard\\\"\\n});\\n \\nwoopra.track(\\\"create widget\\\", {\\n \\n})\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n##Other Important SaaS Actions to Track\n\n###Tracking Team Sharing and Collaboration Actions\n\nDoes your application have sharing or collaboration capabilities? You’ll want to track when users invite other users to join projects, when they join or when they share specific entities. Here’s what this could look like:\n\n**Tracking Sharing and Collaboration Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"user invite\\\", {\\n user: \\\"[email protected]\\\"\\n});\\n \\nwoopra.track(\\\"share widget\\\", {\\n user: \\\"[email protected]\\\",\\n widget: \\\"123\\\"\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Error and Issue Actions\n\nWhether we like it or not, issues and problems occur! Be prepared by tracking the errors that users experience. This will help you build a better product and will arm your customer success team with data to help them provide better service and support. For example, if a user receives a form error, you could submit the action below:\n\n**Tracking Error Actions Example:**\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\nwoopra.track(\\\"form error\\\", {\\n form: \\\"signup form\\\",\\n error: \\\"Email already registered\\\"\\n});\\n \\nwoopra.track(\\\"form error\\\", {\\n form: \\\"login form\\\",\\n error: \\\"Wrong username or password\\\"\\n});\\n \\nwoopra.track(\\\"app error\\\", {\\n app_version: \\\"1.2\\\",\\n error_code: 500,\\n error: \\\"Failed to download resource A\\\"\\n});\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n### Tracking Email Actions\n\nIt’s important for marketers, sales and customer support teams to track when users open, receive and click on emails. Woopra integrates with most of the popular email marketing platforms to make email tracking a breeze. Track email events and update lead lists automatically!\n\nFor example, the [Marketo app](https://www.woopra.com/appconnect/marketo) will track Marketo actions such as an email is sent, or when a user opens and clicks on it. These actions are tracked, sent to Woopra, and included in the Woopra Profile.\n\nIn addition, you’ll have [Trends Reports](https://docs.woopra.com/docs/trends) reflecting these events. For example, you may want to analyze which emails had the most opens among customers in California. Or, you may want to build a [Journey Report ](https://docs.woopra.com/docs/journeys)report showing where people drop off on the path to conversion after they come from an email campaign – and ultimately what impact their email marketing is having on conversion.\n\nYou can also set up [automations](https://docs.woopra.com/docs/triggers) to automatically send new leads to your email marketing software or update existing lead records. For example, if someone signs up on your website, you can set up a Trigger to automatically send the lead’s information to Hubspot and a new Hubspot Lead will be created. If they change their company information, later on, those fields will be updated in their Hubspot Lead record.\n\nWant to use all this data in Woopra to update your email marketing lists based on user behavior? This functionality is also built into our integrations. For example, you could update your Marketo List for “Ready to Buy” users whenever a user completes a free trial, uses the app at least 20 times, and has no unresolved help desk tickets!\n\nPick your email platform below to learn more about each integration:\n\n- [Marketo](https://www.woopra.com/appconnect/marketo)\n- [Hubspot](https://www.woopra.com/appconnect/hubspot)\n- [MailChimp](https://www.woopra.com/appconnect/mailchimp)\n- [SendGrid](https://www.woopra.com/appconnect/sendgrid)\n- [Eloqua](https://www.woopra.com/appconnect/eloqua)\n- [Mandrill](https://www.woopra.com/appconnect/mandrill)\n- [Campaign Monitor](https://www.woopra.com/appconnect/campaignmonitor)\n- [Customer.io](https://www.woopra.com/appconnect/customerio)\n- [Mailgun](https://www.woopra.com/appconnect/mailgun)\n\n### Tracking Support Ticket Actions\n\nAre users who submit support requests more or less likely to convert? What impact do certain product features have on support tickets? Do well-answered support tickets drive conversions? Find all of this out and more by integrating with one of our customer support tools!\n\nWoopra integrates with Zendesk, Freshdesk and a few others. Track when users submit tickets and track when they get resolved. This is helpful to study the attribution of your customer success team to the retention of your customers.\n\nPick your support tool below to learn more:\n\n- [Zendesk](https://www.woopra.com/appconnect/zendesk)\n- [Freshdesk](https://www.woopra.com/appconnect/freshdesk) \n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** [Learn how User Data Leads to Better Customer Service!](https://www.livechatinc.com/blog/how-user-data-leads-to-better-customer-service/)\"\n}\n[/block]\n### Tracking CRM Action Data\n\nLeverage behavioral data from Woopra in Salesforce to get a pulse on customer health without ever leaving your CRM!\n\n[The Woopra + Salesforce integration](https://www.woopra.com/appconnect/salesforce) allows you to automatically create leads within Salesforce and convert them to Salesforce “opportunities” when they meet specified criteria, such as engaging with your website in a certain way or opening your emails. The app also synchronizes your Salesforce fields with Woopra visitor data to automatically create or update visitor properties.\n\nFor example, if someone signs up on your website, the integration could automatically add the user as a lead in Salesforce and populate the lead record with the user’s information such as name, email address, company, and more. Conversely, lead data in SalesForce can be sent to Woopra to automatically update the profile with the lead information.\n\nThe integration could also automatically convert leads to opportunities when the lead has performed specific actions, such as using your SaaS product ten times, submitting at least one support ticket or starting a live chat with a sales rep!\n\n> “Woopra is helping to drive customer success within the customer data analytics market by leveraging the power of the Salesforce Platform to seamlessly integrate behavioral insight and CRM, ultimately transforming the way companies connect with their customers.” – Ron Huddleston, senior vice president, ISV & Channel, Salesforce.com\n\nNot using Salesforce? Check out our other CRM integrations including: [PipeDrive](https://www.woopra.com/appconnect/pipedrive), [CapsuleCRM](https://www.woopra.com/appconnect/capsulecrm) and **Microsoft Dynamics**.\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Learn [how to build a product qualified lead engine](https://www.business2community.com/product-management/build-sales-accelerating-product-qualified-lead-engine-01696527) uniting product engagement and CRM data!\"\n}\n[/block]\n### Tracking NPS Score Actions\n\nAre you collecting valuable NPS data from your customers? Track this data in Woopra to build audiences of promoters and detractors. Integrating with [Delighted](https://www.woopra.com/appconnect/delighted) will allow you to automatically see NPS survey results on profiles on Woopra. You can trigger personalized emails to re-engage detractors or send a special offer to your promoters!\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Pro Tip:** Check out [this post](https://blog.woopra.com/new-in-appconnect-bellgram-and-delighted-75788e41083f) for more tips on leveraging NPS data in Woopra!\"\n}\n[/block]\n### Tracking Phone Call Actions\n\nHow do phone calls impact revenue? How many customers make a call to your team prior to purchasing? Are certain support team members better at handling customer calls than others? Find all of this out, and more, by leveraging phone call data in Woopra! Woopra integrates with [Ringostat](https://www.woopra.com/appconnect/ringostat) [Zoom](https://www.woopra.com/integrations/zoom) and [Sonar](https://www.woopra.com/integrations/sendsonar) to seamlessly track phone call events.\n\nThese events will attach to your Woopra profiles so that you can instantly see if a customer has tried to reach you via phone, who they spoke to, any notes regarding the call and more!\n\nLeveraging Woopra’s segmentation capabilities, you can build Journeys and Trends Reports to determine if phone calls impact a user’s likelihood to purchase or churn. Further drilling down to the representative level, allows you to identify employees that are successfully handling support or sales calls and who could use some help!","excerpt":"The Ultimate Action Tracking Setup Guide: SaaS Edition","slug":"saas-tracking","type":"basic","title":"SaaS Tracking","__v":1,"updatedAt":"2019-03-22T20:29:14.007Z","metadata":{"title":"","description":"","image":[]}},{"_id":"5d041869588d4e0024499632","version":"5b070ce4060bee00035d8d12","updatedAt":"2020-08-30T16:26:46.213Z","createdAt":"2019-06-14T21:58:01.384Z","project":"58b721a1f22b830f009a0bcd","category":"5d0157e5dba6ec001c22b539","parentDoc":"5b15a4ac34eb070003426a6d","user":"5e14d778c12c2802e836097a","updates":[],"next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":3,"body":"##Important Metrics and KPIs\nNow that we are tracking the data we want, the next step is to make sense of the data. If you haven't already started tracking custom events, be sure to check out our [SaaS Tracking](doc:saas-tracking) guide. \n\nSaaS has many important metrics and KPIs that we can look at. Some of these metrics can include the conversion journey, subscription data, churn rates, MMR and satisfaction or NPS scores. Let's take a look at some useful reports we can build in Woopra that can give us insight into these metrics and how we make better data-driven decisions.\n\n##Tracking the Conversion Journey\nTypically for SaaS, users will go through a process of coming to your site, viewing your product offerings, start a trial, using some product features, and then finally convert to a paying customer or subscriber. Simple enough, but there is a lot that can go into this process and there's a lot of data we can extract. \n\nOne thing we can do to find out more is to build out a Journey report to get data on this process. We'll be analyzing users that went to our homepage, what were the top pages they viewed before signing up for a trial, did they add the code to their site, run a report, then finally convert to a paying customer.\n\nLet's take a look at this example Journey for Woopra and how we went about building it:\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/38e1bd7-Image_2019-06-24_at_3.27.20_PM.png\",\n \"Image 2019-06-24 at 3.27.20 PM.png\",\n 890,\n 790,\n \"#f1eff5\"\n ]\n }\n ]\n}\n[/block]\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/2dd2ef0-Image_2019-06-24_at_3.22.32_PM.png\",\n \"Image 2019-06-24 at 3.22.32 PM.png\",\n 1906,\n 728,\n \"#f4f4fa\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n**Step 1** - Add a page view for our landing page. This will get all the users who came to our site.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/b49d458-Image_2019-06-24_at_3.24.28_PM.png\",\n \"Image 2019-06-24 at 3.24.28 PM.png\",\n 1162,\n 1030,\n \"#f4f7f9\"\n ]\n }\n ]\n}\n[/block]\n**Step 2** - We want to see which pages our users are viewing before signing up for a trial. We can add a dynamic step to have Woopra show us our top most viewed pages. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/56768fc-Image_2019-06-24_at_3.26.39_PM.png\",\n \"Image 2019-06-24 at 3.26.39 PM.png\",\n 1030,\n 682,\n \"#f5f8fa\"\n ]\n }\n ]\n}\n[/block]\n**Step 3** - Our sign up step. It's a good idea to track your sign up events so you can add this as a step for analysis. We'll select this event to see how many users are signing up after viewing our site. We've made both of these steps optional so the user's do not need to complete these steps in order to move to the final step. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/02fd26a-Image_2019-06-24_at_3.29.45_PM.png\",\n \"Image 2019-06-24 at 3.29.45 PM.png\",\n 1046,\n 616,\n \"#f5f8fa\"\n ]\n }\n ]\n}\n[/block]\n**Step 4 and 5** - In these steps, we'll track product usage. We want to know what product features are driving conversions. It's good to track all your product usage as events so you can add this step for analysis. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/6715adf-Image_2019-06-24_at_3.32.09_PM.png\",\n \"Image 2019-06-24 at 3.32.09 PM.png\",\n 590,\n 142,\n \"#dee7e0\"\n ]\n }\n ]\n}\n[/block]\n**Step 6** - For our last step, we want our conversion event. Whether this is a payment event, or a subscription started event, this is where the customer converts to paying. We'll select our payment event for this example.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/f5114dc-Image_2019-06-24_at_3.34.21_PM.png\",\n \"Image 2019-06-24 at 3.34.21 PM.png\",\n 1034,\n 668,\n \"#f5f8fa\"\n ]\n }\n ]\n}\n[/block]\nLastly, we'll break this report down by Months and we can see a complete Journey of the conversion process.\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/d7c5ce3-Image_2019-06-24_at_3.36.19_PM.png\",\n \"Image 2019-06-24 at 3.36.19 PM.png\",\n 2340,\n 2176,\n \"#f7f7fa\"\n ]\n }\n ]\n}\n[/block]\n###What insights can we gather from this report?\n####Site Improvements \nNow that we have this data, we can see where some dropoffs occur and this can indicate areas of improvement. We can see after users sign up, only about 32% are adding code to their site. This could indicate a bottleneck in the conversion process. We could improve this step and see higher conversion rates. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/b16c67f-Image_2019-06-24_at_3.38.05_PM.png\",\n \"Image 2019-06-24 at 3.38.05 PM.png\",\n 480,\n 326,\n \"#fcf5f9\"\n ]\n }\n ]\n}\n[/block]\n####Drilldowns, Triggers, and Automations\nFor certain steps, we could even drill down to see which users didn't move on to the next step. Once we have this list, we could run some outreach campaign to try and reengage these users. Additionally, we could create a [People Report](doc:people-reports) based on users who signed up but didn't add code. This is another way we could get that list of users. \n\n####Improving Funnel Conversions\nFrom this report, we can also learn which features are driving conversions. We could even make additional Journey reports focusing on specific features to get a more micro view on the Journey. This can bring some useful insight to help drive conversions. If we know what our top performing products are, we could change our marketing and website to highlight these items and drive more subscriptions.\n \n##Tracking Subscriptions and Churn\nSaaS companies often have a subscription model for certain products or services. Using a [Cohort](doc:cohort) report, we can monitor the health of our subscriptions and churn. \n**Step 1** - Select your timeframe and initial action such as a subscription 'signup' event. You can add constraints as well if you want to focus in on a specific subscription tier or plan as well.\n\n**Step 2** - Select your repeat action which is the subscription pay event. \n\n**Step 3** - Select your metric. We can count visitors to see the number of subscribers.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/1dbb93f-Image_2019-06-11_at_3.02.42_PM.png\",\n \"Image 2019-06-11 at 3.02.42 PM.png\",\n 1218,\n 942,\n \"#f8f5f6\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n###What insights can we gather from this report?\n####Churn Monitoring and Benchmarking\nNow that we have this data, we can look at the report below and this will give us a clear view of churn and renewed subscriptions. \n\nWe can see how many subscriptions are created each month, and how many continue to renew their subscriptions. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/0e25a10-Image_2019-06-11_at_3.04.03_PM.png\",\n \"Image 2019-06-11 at 3.04.03 PM.png\",\n 3492,\n 2762,\n \"#f8f8f9\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n####Sales and Subscriptions Ammounts\nWith a simple change to our configuration We can change this report to show total sales numbers and ammounts.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/f5561ed-Image_2019-06-12_at_11.56.33_AM.png\",\n \"Image 2019-06-12 at 11.56.33 AM.png\",\n 528,\n 102,\n \"#f4f2f3\"\n ],\n \"caption\": \"When we change the metric to 'sum of total', we can see a revenue and subscription report with total amounts.\"\n }\n ]\n}\n[/block]\n#Campaign Tracking Attribution\nAnother important aspect to conversions and sales is to find out which campaigns are working the best. For this, we highly advise the use of [UTM tags](doc:campaign-tracking) for any incoming links.\n\nWoopra will automatically track this data so you can build out reports based on specific campaigns. We can create an attribution report to see which ones are performing the best. \n\n**Step 1** - After we select our timeframe and segment, we will select our initial action. This is where we want to start the analysis of the Attribution Report. For our example, we want to start at the beginning of the user's profile so we'll select Any Action.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/7a3e9f6-Image_2019-08-22_at_3.53.39_PM.png\",\n \"Image 2019-08-22 at 3.53.39 PM.png\",\n 1092,\n 1016,\n \"#eef2f9\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n**Step 2** - Next, we want to define the touchpoints or the actions that are contributing to the conversion event. Here we'll select a Page View event where a Campaign Name exists. We want to break this report down by the various Campaign Names, so under the Dimensions, we'll select 'Campaign Name'. \n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/9abfa19-Image_2019-08-22_at_3.57.22_PM.png\",\n \"Image 2019-08-22 at 3.57.22 PM.png\",\n 858,\n 724,\n \"#e7eef8\"\n ]\n }\n ]\n}\n[/block]\n**Step 3** - We want to define the actual conversion event. This could be a signup event, a payment, a subscription, etc. For this set, our conversion event will be when they visit the contact page. \n\n**Step 4** - Lastly, we need to choose an attribution model to define how we want to distribute the attribution. We'll just select 'Last Touch' because we want all the credit to go to the last campaign that the user came to the site from before the conversion. To learn more about the models, check out our documentation on the [Attribution Reports(doc:attribution). \n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/da09f8d-Image_2019-08-22_at_4.04.07_PM.png\",\n \"Image 2019-08-22 at 4.04.07 PM.png\",\n 1778,\n 1550,\n \"#f6f8fb\"\n ]\n }\n ]\n}\n[/block]\n###What insights can we gather from this report?\n####Best Marketing Channels \nThis report will show us the overall number of people that are coming to your site and then converting. We can see that Adwords is working the best. \n\n##Facebook/Adwords Order Tracking Trends\nWe can dive even deeper and find out how specific campaigns are doing. We could change the touchpoints to be specific campaigns by adding parallel touchpoints for each specific campaign. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/6bd3bf3-Image_2019-08-22_at_4.07.49_PM.png\",\n \"Image 2019-08-22 at 4.07.49 PM.png\",\n 1608,\n 1072,\n \"#edf0f8\"\n ]\n }\n ]\n}\n[/block]\n**Step 1** - In our Trend Report, we'll first filter on a specific segment of users. We want to see only users where their 'first campaign source' contains 'facebook' and 'facebookads'. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/176c79c-Image_2019-06-12_at_3.16.40_PM.png\",\n \"Image 2019-06-12 at 3.16.40 PM.png\",\n 1024,\n 506,\n \"#dce1f5\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n **Step 2** - Next we'll select our action which is our Checkout event.\n\n **Step 3** - Lastly, we'll select what we want to compare by. Here we have order_id, email, first campaign source, and the total.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/5bfb010-Image_2019-06-12_at_3.17.00_PM.png\",\n \"Image 2019-06-12 at 3.17.00 PM.png\",\n 2516,\n 2480,\n \"#f7f5f8\"\n ]\n }\n ]\n}\n[/block]\n###What insights can we gather from this report?\n####Campaign Performance \nHere we have really useful information on how our Facebook ads are doing. We can create similar reports for other campaign sources as well, then we can see which orders are attributed to which campaigns. Again, if we're in marketing, this is super valuable info. We can clearly see who is ordering what, and which Facebook campaign drove the most sales. \n\n\n##Order Lists and Reports\nLastly, we can build out a report to see all the lastest subscriptions.\n\n**Step 1** - First we'll select our timeframe and action. We want a list of recent subscriptions so we'll use our Stripe integration and the 'subscription updated' event.\n\n**Step 2** - Next we'll add the relevant columns. You could select the plan type, trial start and end dates, total plan cost, etc. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/1be8d92-Image_2019-06-25_at_1.38.18_PM.png\",\n \"Image 2019-06-25 at 1.38.18 PM.png\",\n 2354,\n 536,\n \"#f9eef2\"\n ]\n }\n ]\n}\n[/block]\n###What insights can we gather from this report?\n####See All Your Subscriptions\nThis report is great for a straight list of subscriptions and who made them. If we export this list, we can find out which plans are selling the most. This can give us a general overview of popular plan types so we can focus on offerings and make adjustments to plan tiers. We could even use this list to email users that purchased a certain plan and ask for reviews or product feedback. \n\n##Explore Your Data\nI hope these examples give you some ideas about the reports you can build and the types of questions you can answer. We encourage you to explore your data and experiment with the different reports because you never know what important trends or metrics you might uncover.","excerpt":"Let's explore some helpful data points and reports that can be useful for SaaS companies.","slug":"saas-report-examples","type":"basic","title":"SaaS Report Examples","__v":0,"metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false}]}]},{"_id":"5b15a3dd43fbcf0003acae80","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","isAPI":false,"reference":false,"createdAt":"2018-06-04T20:41:01.820Z","from_sync":false,"order":8,"slug":"tracking","title":"Tracking","__v":0,"pages":[{"_id":"5b15a3fe8e08710003061116","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15a3dd43fbcf0003acae80","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-04T20:41:34.132Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"As with any analytics tool, the data is only as good as what you put into it. Setting up Woopra properly from day one will lay the foundation for clean, organized and consistent analysis. Woopra is designed as a complete customer journey analytics tool that you can leverage to not only track a user's journey on your website, but also across multiple devices and platforms. \n\nSo how do we track in Woopra? Woopra employs the use of the Javascript Tracking API as a primary way to get data into Woopra from your website or product. The API code is loaded in the browser as the result of running the Javascript Snippet. This implementation is generally done by developers using any number of tools including the Javascript Tracker, for events on your website, server side SDKs for backend events, and HTTP Tracking API which accepts events from any source with access to http. The last way you will get data into your Woopra instance is by installing Apps in our [integrations hub](https://www.woopra.com/integrations), which will allow you to bring in events and data from other services such as CRMs and email marketing tools. \n\nIt's important to understand the difference between the Snippet and the Tracker. The Snippet is a short simple function that should never need to be changed or be updated that loads the Tracker code itself from the Woopra servers. The Tracker Object itself is the javascript code that sends events into Woopra.\n\nThere are many ways to begin tracking in Woopra. The most common way is the client-side API. If you would like to get started with our technical documentation, please see our technical getting started page: https://docs.woopra.com/reference#intro-javscript-sdk \n\nWhen you are using one of the tracking SDKs or APIs, there are some main concepts that you need to grasp and tasks to do to get going:\n\n* Installing your tracking code\n* Configuring your tracker\n* Tracking events and event properties\n* Tracking visitor properties\n\nThese tasks are completed differently depending on the SDK or API you are going to use to track your data.","excerpt":"","slug":"tracking-overview","type":"basic","title":"Tracking Overview","__v":0,"parentDoc":null,"updatedAt":"2018-08-08T00:16:49.966Z","metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"5d683afa1b63a4005f6f50a8","version":"5b070ce4060bee00035d8d12","updatedAt":"2019-08-29T21:47:42.891Z","createdAt":"2019-08-29T20:52:10.765Z","project":"58b721a1f22b830f009a0bcd","user":"5adfa297452bd900036d0f67","category":"5b15a3dd43fbcf0003acae80","updates":[],"next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":1,"body":"#Action Data\nAn action is any tracked event such as [Custom Actions](doc:custom-actions-and-visitor-data) that you're tracking. With the standard snippet, out of the box, we track 'pageview' events. This is considered an action. You can customize your tracking to record other important actions that you wish to track on your site. These can be things like clicking a button, signing up for a subscription, making a payment, etc. \n\nYou can track [Custom Actions](doc:custom-actions-and-visitor-data) using the [woopra.track()](ref:woopratrack) function.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/f7ed350-action.png\",\n \"action.png\",\n 2436,\n 2094,\n \"#959596\"\n ],\n \"caption\": \"Example of a 'Played Song' action in a user's profile.\"\n }\n ]\n}\n[/block]\n#Visitor Data\nVisitor data is any information about the person that's visiting your site or app and requires customized tracking that your developer will need to implement. Visitor data are things like name, email, company, phone number, etc. \n\nYou can send [Visitor Data](doc:custom-actions-and-visitor-data) to Woopra using the [woopra.identify()](ref:woopraidentify) function. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/10a63c5-viz.png\",\n \"viz.png\",\n 2436,\n 2094,\n \"#909090\"\n ],\n \"caption\": \"Example of Visitor Data in a user's profile.\"\n }\n ]\n}\n[/block]\n#Visit Data\nVisit data is automatically tracked at the start of a session and with events. This data includes [Generated Data Fields](doc:built-in-fields) like browser type, operating system, timestamp, ip address, location, screen resolution, etc. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/50d39d7-visit.png\",\n \"visit.png\",\n 2289,\n 2094,\n \"#999a9a\"\n ],\n \"caption\": \"Example of Visit Data in a user's profile.\"\n }\n ]\n}\n[/block]\n##Also see our section on [Trend Reports](https://docs.woopra.com/docs/trends#section-measured-by) for how we count People, Visits, and Actions.","excerpt":"Woopra will track Action, Visit, and Visitor data.","slug":"types-of-tracked-data","type":"basic","title":"Types of Tracked Data","__v":0,"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"5b15be67f68d3a0003009e3c","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15a3dd43fbcf0003acae80","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-04T22:34:15.974Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":2,"body":"[block:embed]\n{\n \"html\": \"<iframe class=\\\"embedly-embed\\\" src=\\\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fmrb3Xfwii4c%3Ffeature%3Doembed&url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dmrb3Xfwii4c&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fmrb3Xfwii4c%2Fhqdefault.jpg&key=f2aa6fc3595946d0afc3d76cbbd25dc3&type=text%2Fhtml&schema=youtube\\\" width=\\\"854\\\" height=\\\"480\\\" scrolling=\\\"no\\\" frameborder=\\\"0\\\" allow=\\\"autoplay; fullscreen\\\" allowfullscreen=\\\"true\\\"></iframe>\",\n \"url\": \"https://www.youtube.com/watch?v=mrb3Xfwii4c&feature=youtu.be\",\n \"title\": \"Developer Overview\",\n \"favicon\": \"https://s.ytimg.com/yts/img/favicon-vfl8qSV2F.ico\",\n \"image\": \"https://i.ytimg.com/vi/mrb3Xfwii4c/hqdefault.jpg\"\n}\n[/block]\n##Overview\n\nIt's important to understand the difference between the Snippet and the Tracker. The Snippet is a short simple function that should never need to be changed or be updated that loads the Tracker code itself from the Woopra servers. The Tracker Object itself is the javascript code that sends events into Woopra.\n\nGood tracking is crucial to success with Woopra. And a good understanding of the concepts outlined in this section is key to implementing good tracking. Woopra gives you power over your data, but the keyword here is \"your.\" You must get the data into Woopra, one way or another, for Woopra to be of value to you.\n\nFrom a technical standpoint, Woopra is a system for gathering, storing, analyzing, and acting on visitor event data. A visitor is a customer or potential customer who interacts with your website, app, sales team, or any other touchpoints your business has.\n\nThe first step in setting up your Woopra instance is to implement your own custom tracking, and thereby the \"gathering\" part of your Woopra data pipeline.\n\n##The Snippets\n\nThe Snippet is a small function placed on your webpage or app to initialize the Woopra tracking object and to asynchronously load the Woopra tracker code. It's typically placed in the <head> of your document. It's important to keep in mind that the Woopra tracking code runs asynchronously. This means that Woopra will load in the background while your page elements load, therefore it will not slow down the performance of your website or application.\nThe Snippet also defines the tracker's methods so that you can immediately set the configuration and call `track()` and `identify()`, and it will queue those calls and run them when the tracker loads. Please see our [technical getting started] (https://docs.woopra.com/reference#intro-javascript-api) page for more information.\n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Where to find your Snippet\",\n \"body\": \"Click [here](https://app.woopra.com/project/~/configure/status?product_tour_id=39090) to start a quick guide to show you where to find your snippet.\"\n}\n[/block]\nTo find your snippet, you can also navigate to the configure tab and click snippets:\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/42b3b52-snippetnew.gif\",\n \"snippetnew.gif\",\n 1440,\n 700,\n \"#ebf0fc\"\n ],\n \"border\": false\n }\n ]\n}\n[/block]\n##The Tracking code\n\nAfter installing the basic Woopra Snippet, Woopra will automatically track visitor data such as pageviews, IP address, location and even campaign source. The next sections will cover custom actions and visitor data. Please see our technical documentation on tracking [custom actions](https://docs.woopra.com/v3.0/reference#woopratrack) and [visitor data](https://docs.woopra.com/v3.0/reference#woopraidentify).","excerpt":"","slug":"tracking-snippet-and-code","type":"basic","title":"Tracking Snippet and Code","__v":0,"parentDoc":null,"updatedAt":"2020-11-06T21:15:30.232Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2020-11-06T19:10:13.935Z","children":[{"_id":"5b15bfed563b2e00036d33b1","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15a3dd43fbcf0003acae80","user":"5adfa297452bd900036d0f67","parentDoc":"5b15be67f68d3a0003009e3c","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-04T22:40:45.977Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"##Overview\n\nWoopra has three data scopes or types of data that it tracks: event or action data, session data (aka [visit data](doc:generated-visit-properties) ), and [visitor data](doc:visitor-properties) . \n\nAfter installing the basic Woopra Snippet, Woopra will automatically track pageview event data and [visit data](doc:generated-visit-properties) such as IP address, location, and even campaign data. \n[block:callout]\n{\n \"type\": \"warning\",\n \"title\": \"Developer Recommended\",\n \"body\": \"To track custom actions and identifying visitors requires some custom coding and sound knowledge of Javascript and the language(s) that your site or app is leveraging. If you are not the primary developer, you will need to work with your development team to set up this custom data tracking appropriately. If you do not have a developer to help create the custom code, please contact [email protected] and we can referrer you do a third-party developer that can assist with your project (individual rates vary).\"\n}\n[/block]\nThis section will cover tracking custom actions and visitor data that are relevant to your business. This includes actions such as signups, payments, subscription updates, product feature usage, video views and so on. This also includes visitor data such as emails and names. \n\nPlease see our technical documentation for [custom actions](https://docs.woopra.com/reference#woopratrack) and [visitor data](https://docs.woopra.com/reference#woopraidentify). As well as a more in-depth guide on what to track for [eCommerce](https://docs.woopra.com/docs/ecommerce-tracking) and [SaaS](https://docs.woopra.com/docs/saas-tracking). \n\n\n##Tracking Action Data\n\n*What:* Custom action data allows you to track any kind of action that is important to your business. For example, you could track “signup”, “play video”, “payment”, and any other critical actions that you would like to analyze and use as criteria for segmentation and reports.\n\n*Why*: This data can be invaluable to your business. Knowing where user drop off occurs or how many users are clicking on a specific blog can greatly influence site improvement and user engagement. This action data allows you to analyze critical customer behavior that is immediately relevant to you across your various touchpoints. Data driven decisions can make or break a business — tracking actions in Woopra is imperative to get you the data you need. \n\n*How*: In order to track custom actions, you must send them to Woopra in the Javascript tracking code you placed on your website. For further instructions on how to do this, please see the Javascript tracking setup [tutorial](https://docs.woopra.com/reference#intro-javscript-sdk). These actions can also be tracked by built-in events installed automatically when you install an Integrations app.\n\n*Next*: Once you're tracking action data, you can immediately use it throughout Woopra’s features. You can use this data to create various reports(report links), use it to filter customer segments, and even trigger automations. Woopra will automatically create “schemas” the moment the action is detected. Schemas are used to tell Woopra how to read and aggregate the data. More info can be found in our Schemas section (link).\n\n\n##Tracking Visitor Data\n\n\n*What*: Visitor data allows you to track visitor information that is important to your business. This includes tracking visit durations and acquiring identity information such as names and emails when they sign up. Visitor properties are known in different systems as contact or user properties or fields. They are very simply, data describing properties of a particular person. In Woopra, an email property is considered a unique identifier for the visitor. If you don’t specify the email property for the visitor, Woopra will automatically fall back to the cookie as a unique identifier.\n\n*Why*: To get the full value out of Woopra, you should identify your visitors using custom visitor data. You can use this data for campaigns or understanding user behavior. For example, knowing what companies your users are working for and which campaigns are driving your signups can save you time and money. \n\n*How*: In order to track custom visitor data, you must send it to Woopra by identifying users in the tracking code you place on your website. For more info please see our technical documentation on visitor [tracking](https://docs.woopra.com/reference#woopraidentify), or the specific SDK you wish to use. Additionally, you can start identifying visitors by email address whenever they sign up if at all possible, as this will give you more accurate data about each individual’s behavior. Lastly, many of our Integration apps require visitors to be identified by email in order to assign the behavioral data to the correct profile.\n\n*Next*: Once you are tracking visitor data in Woopra, you can use this data throughout Woopra’s features. You can use this data to filter or segment users based on selected criteria, create detailed People reports, and create profiles that track a user's journeys through their engagement with your product. Similar to Action data, Woopra will automatically create “schemas” for these events as well.","excerpt":"","slug":"custom-actions-and-visitor-data","type":"basic","title":"Custom Actions and Visitor Data","__v":0,"updatedAt":"2019-08-29T20:49:53.906Z","metadata":{"title":"","description":"","image":[]}},{"_id":"5b58eb4e54276d0003a2cb22","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15a3dd43fbcf0003acae80","user":"5adfa297452bd900036d0f67","parentDoc":"5b15be67f68d3a0003009e3c","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-07-25T21:27:42.468Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":1,"body":"Visitor data is data about a person who you are tracking in your Woopra instance.\n\nThe Visitor data scope is essentially all your contact data in Woopra. Think of things like, names, ages, email addresses, ARR, social media handles, phone numbers, company/job title information, etc.\n\nThis data is sent to Woopra usually using the identify functionality of the tracking objects and SDKs. You can learn more about implementing your identify calls by starting with the Javascript API document.\n[block:api-header]\n{\n \"title\": \"Static (normal) Visitor Properties\"\n}\n[/block]\nVisitor properties are known in different systems as contact or user properties or fields. They are very simply, data about the person.\n\nWe differentiate static properties from dynamic properties, see below. Static properties are a basic value and that value will not change unless an tracking request changes it, or it is changed manually in the interface. They are called static becasue the value itself does not change except explicitly.\n[block:api-header]\n{\n \"title\": \"Identifiers\"\n}\n[/block]\nSome visitor properties are special in that they can be used to uniquely identify an individual. These are called visitor identifiers. Identifiers are called unique properties becasue generally, only one visitor profile can have a given value for these properties, and thus they can be used to uniquely find a person's profile. Identifiers are also static visitor properties.\n\nPractically, the use of unique identifiers is how the Woopra system knows for a given track request which profile/person performed the event in question.\n\nAll Woopra instances have certain identifiers already defined. These are id, email, and cookie. Enterprise accounts can define their own identifiers too.\n\nThere are some details to get into if you are a developer implementing your tracking. See Woopra's Profile ID System for more detailed technical info on how we manage multiple unique identifiers. Especially noteworthy is understanding the ID hierarchy.\n[block:api-header]\n{\n \"title\": \"Dynamic Fields\"\n}\n[/block]\nA dynamic field is like a visitor property in that it is a piece of data in the visitor scope, i.e.: a piece of data about a person. However, dynamic fields are different from other visitor properties in that they are defined by a formula, and are calculated at the time that you query them.\n\nFor instance, there is a built-in dynamic field called Actions Last 90 Days. Every time a person's profile is loaded for an analytics report or to evaluate triggers, the dynamic field is re-calculated so as to be accurate. So every time you load a profile in the people view, Woopra counts all of the actions the person has done in the past 90 days, including actions that they did seconds ago, and displays that.\n\nOther visitor properties maintain their value unless explicitly set to a new one by a track or identify request, or manually in the interface. But dynamic visitor properties have no set value, they are just calculated in real time when needed because at any given moment, they could be different than they were last time someone looked at the profile.","excerpt":"Tracking and Saving Visitor Properties in User Profiles","slug":"visitor-properties","type":"basic","title":"Visitor Properties","__v":0,"updatedAt":"2019-07-24T22:45:54.574Z","metadata":{"title":"","description":"","image":[]}}],"childrenPages":[{"_id":"5b15bfed563b2e00036d33b1","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15a3dd43fbcf0003acae80","user":"5adfa297452bd900036d0f67","parentDoc":"5b15be67f68d3a0003009e3c","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-04T22:40:45.977Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"##Overview\n\nWoopra has three data scopes or types of data that it tracks: event or action data, session data (aka [visit data](doc:generated-visit-properties) ), and [visitor data](doc:visitor-properties) . \n\nAfter installing the basic Woopra Snippet, Woopra will automatically track pageview event data and [visit data](doc:generated-visit-properties) such as IP address, location, and even campaign data. \n[block:callout]\n{\n \"type\": \"warning\",\n \"title\": \"Developer Recommended\",\n \"body\": \"To track custom actions and identifying visitors requires some custom coding and sound knowledge of Javascript and the language(s) that your site or app is leveraging. If you are not the primary developer, you will need to work with your development team to set up this custom data tracking appropriately. If you do not have a developer to help create the custom code, please contact [email protected] and we can referrer you do a third-party developer that can assist with your project (individual rates vary).\"\n}\n[/block]\nThis section will cover tracking custom actions and visitor data that are relevant to your business. This includes actions such as signups, payments, subscription updates, product feature usage, video views and so on. This also includes visitor data such as emails and names. \n\nPlease see our technical documentation for [custom actions](https://docs.woopra.com/reference#woopratrack) and [visitor data](https://docs.woopra.com/reference#woopraidentify). As well as a more in-depth guide on what to track for [eCommerce](https://docs.woopra.com/docs/ecommerce-tracking) and [SaaS](https://docs.woopra.com/docs/saas-tracking). \n\n\n##Tracking Action Data\n\n*What:* Custom action data allows you to track any kind of action that is important to your business. For example, you could track “signup”, “play video”, “payment”, and any other critical actions that you would like to analyze and use as criteria for segmentation and reports.\n\n*Why*: This data can be invaluable to your business. Knowing where user drop off occurs or how many users are clicking on a specific blog can greatly influence site improvement and user engagement. This action data allows you to analyze critical customer behavior that is immediately relevant to you across your various touchpoints. Data driven decisions can make or break a business — tracking actions in Woopra is imperative to get you the data you need. \n\n*How*: In order to track custom actions, you must send them to Woopra in the Javascript tracking code you placed on your website. For further instructions on how to do this, please see the Javascript tracking setup [tutorial](https://docs.woopra.com/reference#intro-javscript-sdk). These actions can also be tracked by built-in events installed automatically when you install an Integrations app.\n\n*Next*: Once you're tracking action data, you can immediately use it throughout Woopra’s features. You can use this data to create various reports(report links), use it to filter customer segments, and even trigger automations. Woopra will automatically create “schemas” the moment the action is detected. Schemas are used to tell Woopra how to read and aggregate the data. More info can be found in our Schemas section (link).\n\n\n##Tracking Visitor Data\n\n\n*What*: Visitor data allows you to track visitor information that is important to your business. This includes tracking visit durations and acquiring identity information such as names and emails when they sign up. Visitor properties are known in different systems as contact or user properties or fields. They are very simply, data describing properties of a particular person. In Woopra, an email property is considered a unique identifier for the visitor. If you don’t specify the email property for the visitor, Woopra will automatically fall back to the cookie as a unique identifier.\n\n*Why*: To get the full value out of Woopra, you should identify your visitors using custom visitor data. You can use this data for campaigns or understanding user behavior. For example, knowing what companies your users are working for and which campaigns are driving your signups can save you time and money. \n\n*How*: In order to track custom visitor data, you must send it to Woopra by identifying users in the tracking code you place on your website. For more info please see our technical documentation on visitor [tracking](https://docs.woopra.com/reference#woopraidentify), or the specific SDK you wish to use. Additionally, you can start identifying visitors by email address whenever they sign up if at all possible, as this will give you more accurate data about each individual’s behavior. Lastly, many of our Integration apps require visitors to be identified by email in order to assign the behavioral data to the correct profile.\n\n*Next*: Once you are tracking visitor data in Woopra, you can use this data throughout Woopra’s features. You can use this data to filter or segment users based on selected criteria, create detailed People reports, and create profiles that track a user's journeys through their engagement with your product. Similar to Action data, Woopra will automatically create “schemas” for these events as well.","excerpt":"","slug":"custom-actions-and-visitor-data","type":"basic","title":"Custom Actions and Visitor Data","__v":0,"updatedAt":"2019-08-29T20:49:53.906Z","metadata":{"title":"","description":"","image":[]}},{"_id":"5b58eb4e54276d0003a2cb22","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15a3dd43fbcf0003acae80","user":"5adfa297452bd900036d0f67","parentDoc":"5b15be67f68d3a0003009e3c","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-07-25T21:27:42.468Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":1,"body":"Visitor data is data about a person who you are tracking in your Woopra instance.\n\nThe Visitor data scope is essentially all your contact data in Woopra. Think of things like, names, ages, email addresses, ARR, social media handles, phone numbers, company/job title information, etc.\n\nThis data is sent to Woopra usually using the identify functionality of the tracking objects and SDKs. You can learn more about implementing your identify calls by starting with the Javascript API document.\n[block:api-header]\n{\n \"title\": \"Static (normal) Visitor Properties\"\n}\n[/block]\nVisitor properties are known in different systems as contact or user properties or fields. They are very simply, data about the person.\n\nWe differentiate static properties from dynamic properties, see below. Static properties are a basic value and that value will not change unless an tracking request changes it, or it is changed manually in the interface. They are called static becasue the value itself does not change except explicitly.\n[block:api-header]\n{\n \"title\": \"Identifiers\"\n}\n[/block]\nSome visitor properties are special in that they can be used to uniquely identify an individual. These are called visitor identifiers. Identifiers are called unique properties becasue generally, only one visitor profile can have a given value for these properties, and thus they can be used to uniquely find a person's profile. Identifiers are also static visitor properties.\n\nPractically, the use of unique identifiers is how the Woopra system knows for a given track request which profile/person performed the event in question.\n\nAll Woopra instances have certain identifiers already defined. These are id, email, and cookie. Enterprise accounts can define their own identifiers too.\n\nThere are some details to get into if you are a developer implementing your tracking. See Woopra's Profile ID System for more detailed technical info on how we manage multiple unique identifiers. Especially noteworthy is understanding the ID hierarchy.\n[block:api-header]\n{\n \"title\": \"Dynamic Fields\"\n}\n[/block]\nA dynamic field is like a visitor property in that it is a piece of data in the visitor scope, i.e.: a piece of data about a person. However, dynamic fields are different from other visitor properties in that they are defined by a formula, and are calculated at the time that you query them.\n\nFor instance, there is a built-in dynamic field called Actions Last 90 Days. Every time a person's profile is loaded for an analytics report or to evaluate triggers, the dynamic field is re-calculated so as to be accurate. So every time you load a profile in the people view, Woopra counts all of the actions the person has done in the past 90 days, including actions that they did seconds ago, and displays that.\n\nOther visitor properties maintain their value unless explicitly set to a new one by a track or identify request, or manually in the interface. But dynamic visitor properties have no set value, they are just calculated in real time when needed because at any given moment, they could be different than they were last time someone looked at the profile.","excerpt":"Tracking and Saving Visitor Properties in User Profiles","slug":"visitor-properties","type":"basic","title":"Visitor Properties","__v":0,"updatedAt":"2019-07-24T22:45:54.574Z","metadata":{"title":"","description":"","image":[]}}]},{"_id":"5b15c10a5c9a620003d4a945","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15a3dd43fbcf0003acae80","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-04T22:45:30.293Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":3,"body":"**Cross Domain Tracking** provides a way to track a visitor's journey across multiple domains. This enables you to track your mobile app to a subdomain to the website and back again! It's now fairly common for businesses to break down their applications into smaller parts by using different domains and sub-domains. \n\n**When you are working with unique domains, you can track visitors in a couple different ways. **\n1. You can track visitors using multiple Woopra projects and keep this data separate.\n2. You can send all of your customer data to a single project. \n \nThe second option is the Woopra preferred method for customer tracking, as this will provide a full customer journey and offers the most actionable insights for your business.\n\nThe importance of cross-domain tracking is to not only store your data in a single project, but to also maintain a visitors session when they explore unique domains. The events of previously identified visitors should be monitored and associated with the same customer profile, regardless of the domain they visit. This is the key to providing a comprehensive customer journey.\n\nWhen a visitor visits an alternate domain, the cookies associated with that visitor are inaccessible, which causes split profiles in your Woopra project. Without the cookie to associate to the visitor, Woopra has no way of knowing that the visitor on the new domain is the same as the visitor from the previous domain. Woopra would require the visitor to again identify themselves by signing up to an email list or logging in to the platform.\n\nThis is the problem that cross-domain tracking solves. When configured correctly, Woopra will attach the cookie value to the url of all specified domains, allowing it to associate that cookie with the visitor from your previous domain.\n\nYour Woopra configuration will require an update of your provided JavaScript Tracking code. In some instances, when using a different SDK, the tracking code will be different, but in this guide we will cover the implementation for our JavaScript tracking SDK.\n\nThroughout the following Methods section, we will show you the necessary `woopra.config()` alterations you will need to make within this tracking snippet.","excerpt":"**Cross Domain Tracking** provides a way to track a visitor's journey across multiple domains. This enables you to track your mobile app to a subdomain to the website and back again!","slug":"cross-domain-tracking","type":"basic","title":"Cross Domain Tracking","__v":0,"parentDoc":null,"updatedAt":"2019-01-18T00:43:13.691Z","metadata":{"title":"","description":"","image":[]},"children":[{"_id":"5b15c17634eb070003426e62","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15a3dd43fbcf0003acae80","user":"5adfa297452bd900036d0f67","parentDoc":"5b15c10a5c9a620003d4a945","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-04T22:47:18.217Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"#Which method should you use?\n\nWoopra will use the email address or specified internal ID to consolidate your visitor profiles, across all domains. But that's unlikely to be the case for most of Woopra customers who run their business on multiple domains.\n\nIf your visitors are being identified on each of your domains, then there is no need for you to over-complicate your configuration with cross-domain tracking.\n\nIf your visitors are not getting identified on each of your domains, there are three questions we need to ask:\n\n###1. Are all my domains sharing the same main domain?\n\nThis is the typical subdomain use case and it's the easiest to solve.\nYou will simply need to update the woopra.config() to store the visitors cookie on your main project domain.\n\nSo, if your main domain is mybusiness.com (http://mybusiness.com/) and you have content on subdomains such as docs.mybusiness.com, app.mybusiness.com (http://app.mybusiness.com/) and status.mybusiness.com, you should use the *Sub-domain tracking method*.\n\n###2. Are visitors navigating between those domains by clicking on links that lead to the other domain?\n\nIf this is the case, we recommend using the *URL decoration method*, which is built into the Woopra tracker configuration, or your woopra.config().\n\nIn this instance, the URL Decoration method is most reliable because it will transfer the cookie value to the end of the query string of the new domain. Woopra will then automatically grab this cookie value from the URL and store it in the new domain.\n\n###3. Are visitors anonymous and not likely to navigate between multiple domains?**\n\nIf your visitors are always anonymous and are not likely to navigate between multiple domains (that's a common case for publishers who have different domains), then we recommend using the *3rd-party cookie method*.\n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Enterprise Only\",\n \"body\": \"This method is only available to our enterprise customers. Contact [[email protected]](mailto:[email protected]) to learn more.\"\n}\n[/block]\nThis method should be your final option to use, since it tends to be less accurate than the other solutions. Based on the industry benchmarks, this method will work for about 60% of the users on the web, depending on whether the 3rd-party cookies are enabled in your visitors browsers.\n\nChrome, which is the most popular browser, has that feature enabled by default. The last version of Safari that is shipped with the macOS High Sierra has 3rd-party cookies automatically blocked, so this option will not work for new Safari users.\n\nThis is everything you need to know to begin tracking your domains. Storing your analytics in one place allows you to understand your entire customer journey, and allows for more complete and reliable insights.","excerpt":"","slug":"methods","type":"basic","title":"What Method to use?","__v":0,"updatedAt":"2020-05-30T08:56:10.409Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false},{"_id":"5b15c6cc563b2e00036d3427","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15a3dd43fbcf0003acae80","user":"5adfa297452bd900036d0f67","parentDoc":"5b15c10a5c9a620003d4a945","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-04T23:10:04.540Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":1,"body":"##Two Domains\nTo get started with cross-domain tracking, you will need to configure your project as normal, setting the domain property in your woopra.config() to your current project name. But, you will also need to add the additional property cross_domain and specify the alternate domains you want to track.\n\nThe configuration for your primary domain will be as follows:\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.config({ \\n domain: 'primary-domain.com', \\n cross_domain: 'secondary-domain.com' \\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nThe configuration for your secondary domain will need some slight adjustment, with both domains being configured to the primary domain of your Woopra project.\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.config({ \\n domain: 'primary-domain.com', \\n cross_domain: 'primary-domain.com' \\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nCross-domain tracking will alter all outbound links to your secondary domain and attach the visitors cookie value to them. With the cookie value attached, Woopra can then recognize the visitor from the primary domain and associate this visit with the already created people profile within Woopra.\n\n##Over Two Domains\n\nIn the event you have multiple domains and would like to track users across all of them, you are able to assign an array of domain names to the cross_domain property.\n\nYour woopra.config() will be configured as follows:\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.config({ \\n domain: 'primary-domain.com', \\n cross_domain: ['secondary-domain.com', 'third-domain.com', 'fourth-domain.com'] \\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nSimilar to the URL Decoration tracking configuration, you will then need to update all other domains setting the cross_domain property to show your primary project name as well as the other domains you wish to track.\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.config({ \\n domain: 'primary-domain.com', \\n cross_domain: ['primary-domain.com', 'third-domain.com', 'fourth-domain.com'] \\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n\nWoopra will attach the visitors cookie value to the url of each domain specified in the cross_domain property array.\n\nWith the cookie in place, Woopra can then attribute that visitor as the same visitor on each domain.","excerpt":"","slug":"url-decoration-method","type":"basic","title":"URL Decoration Method","__v":0,"updatedAt":"2018-06-04T23:11:12.385Z","metadata":{"title":"","description":"","image":[]}},{"_id":"5b15c7485c9a620003d4a9b0","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15a3dd43fbcf0003acae80","user":"5adfa297452bd900036d0f67","parentDoc":"5b15c10a5c9a620003d4a945","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-04T23:12:08.195Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":2,"body":"The set up when tracking sub-domains is a little different to tracking unique domains.\n\nWhile the process looks the same, slight alterations need to be made in your `woopra.config()` to achieve the desired results. \n\nTo track all sub-domains associated with your domain and store this data within a single project, you can do that by adding the `cookie_domain` property to your `woopra.config()`.\n\nAs you can see from the code snippet below, your domain property value remains the same, but you will need to pass in the cookie_domain property in addition to your project name. This value is your Woopra projects name with a period in front of that value.\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.config({\\n domain: 'primary-domain.com',\\n cookie_domain: '.primary-domain.com' \\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nFor example, if your Woopra project name is google.com, your `cookie_domain` value will be `'.google.com'`.\n\nUnlike other methods of cross-domain tracking, with Sub-Domain Tracking, you do not need to add these domains individually to your Woopra configuration, Woopra will do this automatically.","excerpt":"","slug":"sub-domain-tracking","type":"basic","title":"Sub-Domain tracking","__v":0,"updatedAt":"2020-05-30T08:57:40.192Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false},{"_id":"5e17ad9a23b79100394aca2c","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","user":"5adfa297452bd900036d0f67","parentDoc":"5b15c10a5c9a620003d4a945","category":"5b15a3dd43fbcf0003acae80","updates":[],"updatedAt":"2020-01-09T21:25:57.836Z","createdAt":"2020-01-09T21:25:57.836Z","next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":3,"body":"If you will be tracking on both cross and sub domains you can use the example below. \n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"//put on the primary site\\nwoopra.config({\\n domain: 'primary-domain.com',\\n cookie_domain: '.primary-domain.com',\\n cross_domain: 'secondary-domain.com'\\n});\\n\\n//put on sub domain\\nwoopra.config({\\n domain: 'primary-domain.com',\\n cookie_domain: '.primary-domain.com',\\n cross_domain: 'secondary-domain.com'\\n});\\n\\n//put on cross domain\\nwoopra.config({\\n domain: 'primary-domain.com',\\n cookie_domain: '.primary-domain.com',\\n cross_domain: 'primary-domain.com'\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]","excerpt":"","slug":"both-cross-domain-and-sub-domain-tracking-example","type":"basic","metadata":{"description":"","title":"","image":[]},"title":"Both Cross-Domain and Sub-Domain Tracking Example","__v":0},{"_id":"5b15ca138e087100030614d2","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15a3dd43fbcf0003acae80","user":"5adfa297452bd900036d0f67","parentDoc":"5b15c10a5c9a620003d4a945","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-04T23:24:03.940Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":4,"body":"[block:callout]\n{\n \"type\": \"danger\",\n \"title\": \"Outdated Method\",\n \"body\": \"Most new browsers will block 3rd party cookies so this method is deprecated.\"\n}\n[/block]\nThe 3rd-party cookie method requires little to no setup, nor does it require advanced changes to be made to your Woopra configuration in order to implement. This method is most commonly used by businesses when their visitors are anonymous and have not been identified using `woopra.identify() `.\n\nWoopra will essentially store your visitors' cookie values, from different domains, and associate these cookie values with each of your individual visitors. With this tracking method, visitors will not need to click links on your website in order to be tracked across all of your domains. \n\nOur 3rd-party cookie method sound like the answer to all your questions, but they do have their limitations. \n\nThis method only works roughly 60% of the time, due to the more common use of tracking blockers and JavaScript being disabled on browsers. To give you some additional background, Chrome, which is the World's most popular browser, has 3rd-party cookies enabled by default, but Safari, on the other hand, that is shipped with the macOS High Sierra, has 3rd-party cookies automatically blocked, so this option will not work for new Safari users. \n\nIt's important to understand your use case in order to identify the optimum method for your business.","excerpt":"","slug":"3rd-party-cookie-method-pro-plan-only","type":"basic","title":"3rd-Party Cookie Method (Enterprise Only)","__v":0,"updatedAt":"2020-05-30T08:59:28.359Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false}],"childrenPages":[{"_id":"5b15c17634eb070003426e62","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15a3dd43fbcf0003acae80","user":"5adfa297452bd900036d0f67","parentDoc":"5b15c10a5c9a620003d4a945","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-04T22:47:18.217Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"#Which method should you use?\n\nWoopra will use the email address or specified internal ID to consolidate your visitor profiles, across all domains. But that's unlikely to be the case for most of Woopra customers who run their business on multiple domains.\n\nIf your visitors are being identified on each of your domains, then there is no need for you to over-complicate your configuration with cross-domain tracking.\n\nIf your visitors are not getting identified on each of your domains, there are three questions we need to ask:\n\n###1. Are all my domains sharing the same main domain?\n\nThis is the typical subdomain use case and it's the easiest to solve.\nYou will simply need to update the woopra.config() to store the visitors cookie on your main project domain.\n\nSo, if your main domain is mybusiness.com (http://mybusiness.com/) and you have content on subdomains such as docs.mybusiness.com, app.mybusiness.com (http://app.mybusiness.com/) and status.mybusiness.com, you should use the *Sub-domain tracking method*.\n\n###2. Are visitors navigating between those domains by clicking on links that lead to the other domain?\n\nIf this is the case, we recommend using the *URL decoration method*, which is built into the Woopra tracker configuration, or your woopra.config().\n\nIn this instance, the URL Decoration method is most reliable because it will transfer the cookie value to the end of the query string of the new domain. Woopra will then automatically grab this cookie value from the URL and store it in the new domain.\n\n###3. Are visitors anonymous and not likely to navigate between multiple domains?**\n\nIf your visitors are always anonymous and are not likely to navigate between multiple domains (that's a common case for publishers who have different domains), then we recommend using the *3rd-party cookie method*.\n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Enterprise Only\",\n \"body\": \"This method is only available to our enterprise customers. Contact [[email protected]](mailto:[email protected]) to learn more.\"\n}\n[/block]\nThis method should be your final option to use, since it tends to be less accurate than the other solutions. Based on the industry benchmarks, this method will work for about 60% of the users on the web, depending on whether the 3rd-party cookies are enabled in your visitors browsers.\n\nChrome, which is the most popular browser, has that feature enabled by default. The last version of Safari that is shipped with the macOS High Sierra has 3rd-party cookies automatically blocked, so this option will not work for new Safari users.\n\nThis is everything you need to know to begin tracking your domains. Storing your analytics in one place allows you to understand your entire customer journey, and allows for more complete and reliable insights.","excerpt":"","slug":"methods","type":"basic","title":"What Method to use?","__v":0,"updatedAt":"2020-05-30T08:56:10.409Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false},{"_id":"5b15c6cc563b2e00036d3427","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15a3dd43fbcf0003acae80","user":"5adfa297452bd900036d0f67","parentDoc":"5b15c10a5c9a620003d4a945","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-04T23:10:04.540Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":1,"body":"##Two Domains\nTo get started with cross-domain tracking, you will need to configure your project as normal, setting the domain property in your woopra.config() to your current project name. But, you will also need to add the additional property cross_domain and specify the alternate domains you want to track.\n\nThe configuration for your primary domain will be as follows:\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.config({ \\n domain: 'primary-domain.com', \\n cross_domain: 'secondary-domain.com' \\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nThe configuration for your secondary domain will need some slight adjustment, with both domains being configured to the primary domain of your Woopra project.\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.config({ \\n domain: 'primary-domain.com', \\n cross_domain: 'primary-domain.com' \\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nCross-domain tracking will alter all outbound links to your secondary domain and attach the visitors cookie value to them. With the cookie value attached, Woopra can then recognize the visitor from the primary domain and associate this visit with the already created people profile within Woopra.\n\n##Over Two Domains\n\nIn the event you have multiple domains and would like to track users across all of them, you are able to assign an array of domain names to the cross_domain property.\n\nYour woopra.config() will be configured as follows:\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.config({ \\n domain: 'primary-domain.com', \\n cross_domain: ['secondary-domain.com', 'third-domain.com', 'fourth-domain.com'] \\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nSimilar to the URL Decoration tracking configuration, you will then need to update all other domains setting the cross_domain property to show your primary project name as well as the other domains you wish to track.\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.config({ \\n domain: 'primary-domain.com', \\n cross_domain: ['primary-domain.com', 'third-domain.com', 'fourth-domain.com'] \\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n\nWoopra will attach the visitors cookie value to the url of each domain specified in the cross_domain property array.\n\nWith the cookie in place, Woopra can then attribute that visitor as the same visitor on each domain.","excerpt":"","slug":"url-decoration-method","type":"basic","title":"URL Decoration Method","__v":0,"updatedAt":"2018-06-04T23:11:12.385Z","metadata":{"title":"","description":"","image":[]}},{"_id":"5b15c7485c9a620003d4a9b0","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15a3dd43fbcf0003acae80","user":"5adfa297452bd900036d0f67","parentDoc":"5b15c10a5c9a620003d4a945","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-04T23:12:08.195Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":2,"body":"The set up when tracking sub-domains is a little different to tracking unique domains.\n\nWhile the process looks the same, slight alterations need to be made in your `woopra.config()` to achieve the desired results. \n\nTo track all sub-domains associated with your domain and store this data within a single project, you can do that by adding the `cookie_domain` property to your `woopra.config()`.\n\nAs you can see from the code snippet below, your domain property value remains the same, but you will need to pass in the cookie_domain property in addition to your project name. This value is your Woopra projects name with a period in front of that value.\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.config({\\n domain: 'primary-domain.com',\\n cookie_domain: '.primary-domain.com' \\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nFor example, if your Woopra project name is google.com, your `cookie_domain` value will be `'.google.com'`.\n\nUnlike other methods of cross-domain tracking, with Sub-Domain Tracking, you do not need to add these domains individually to your Woopra configuration, Woopra will do this automatically.","excerpt":"","slug":"sub-domain-tracking","type":"basic","title":"Sub-Domain tracking","__v":0,"updatedAt":"2020-05-30T08:57:40.192Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false},{"_id":"5e17ad9a23b79100394aca2c","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","user":"5adfa297452bd900036d0f67","parentDoc":"5b15c10a5c9a620003d4a945","category":"5b15a3dd43fbcf0003acae80","updates":[],"updatedAt":"2020-01-09T21:25:57.836Z","createdAt":"2020-01-09T21:25:57.836Z","next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":3,"body":"If you will be tracking on both cross and sub domains you can use the example below. \n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"//put on the primary site\\nwoopra.config({\\n domain: 'primary-domain.com',\\n cookie_domain: '.primary-domain.com',\\n cross_domain: 'secondary-domain.com'\\n});\\n\\n//put on sub domain\\nwoopra.config({\\n domain: 'primary-domain.com',\\n cookie_domain: '.primary-domain.com',\\n cross_domain: 'secondary-domain.com'\\n});\\n\\n//put on cross domain\\nwoopra.config({\\n domain: 'primary-domain.com',\\n cookie_domain: '.primary-domain.com',\\n cross_domain: 'primary-domain.com'\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]","excerpt":"","slug":"both-cross-domain-and-sub-domain-tracking-example","type":"basic","metadata":{"description":"","title":"","image":[]},"title":"Both Cross-Domain and Sub-Domain Tracking Example","__v":0},{"_id":"5b15ca138e087100030614d2","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15a3dd43fbcf0003acae80","user":"5adfa297452bd900036d0f67","parentDoc":"5b15c10a5c9a620003d4a945","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-04T23:24:03.940Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":4,"body":"[block:callout]\n{\n \"type\": \"danger\",\n \"title\": \"Outdated Method\",\n \"body\": \"Most new browsers will block 3rd party cookies so this method is deprecated.\"\n}\n[/block]\nThe 3rd-party cookie method requires little to no setup, nor does it require advanced changes to be made to your Woopra configuration in order to implement. This method is most commonly used by businesses when their visitors are anonymous and have not been identified using `woopra.identify() `.\n\nWoopra will essentially store your visitors' cookie values, from different domains, and associate these cookie values with each of your individual visitors. With this tracking method, visitors will not need to click links on your website in order to be tracked across all of your domains. \n\nOur 3rd-party cookie method sound like the answer to all your questions, but they do have their limitations. \n\nThis method only works roughly 60% of the time, due to the more common use of tracking blockers and JavaScript being disabled on browsers. To give you some additional background, Chrome, which is the World's most popular browser, has 3rd-party cookies enabled by default, but Safari, on the other hand, that is shipped with the macOS High Sierra, has 3rd-party cookies automatically blocked, so this option will not work for new Safari users. \n\nIt's important to understand your use case in order to identify the optimum method for your business.","excerpt":"","slug":"3rd-party-cookie-method-pro-plan-only","type":"basic","title":"3rd-Party Cookie Method (Enterprise Only)","__v":0,"updatedAt":"2020-05-30T08:59:28.359Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false}]},{"_id":"5b070ce4060bee00035d8d00","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","category":"5b15a3dd43fbcf0003acae80","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-02-19T04:21:51.236Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":4,"body":"[block:api-header]\n{\n \"title\": \"Overview\"\n}\n[/block]\nCampaign tracking in Woopra allows you to monitor and measure the effectiveness of your various campaigns. Campaigns are essentially [custom event properties](https://docs.woopra.com/docs/custom-actions-and-visitor-data) of your landing pageview event and can be tracked the same way as any other property.\n\nHowever, to simplify the process for tracking campaigns, the Woopra script is designed to read specified tags from your URL and automatically add them as custom event properties to the landing pageview event.\n[block:callout]\n{\n \"type\": \"warning\",\n \"title\": \"Use UTM tags for any incoming links to your site\",\n \"body\": \"Using UTM tags will be much more accurate than using referrer types. Please see our section on [Why Referer Tracking can be Inaccurate](doc:why-referer-tracking-can-be-inaccurate).\"\n}\n[/block]\n\n[block:api-header]\n{\n \"title\": \"How it Works\"\n}\n[/block]\nWoopra’s campaign tracking works by identifying key tags stored in the URLs of your campaign landing pages. Normally when a visitor clicks a link to your site, they just go to:\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"http://www.yourwebsite.com\",\n \"language\": \"text\"\n }\n ]\n}\n[/block]\nThe problem with this is it doesn’t really tell you or Woopra much about how the visitor got to your site. Campaign tracking works by appending information to the end of the link so that Woopra can see which campaign the visitor clicked on to get to your site. These pieces of information look like:\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"http://www.yourwebsite.com/?woo_campaign=webinar\",\n \"language\": \"text\"\n }\n ]\n}\n[/block]\nWhen Woopra sees this information, it automatically categorizes that activity with the campaign named “webinar”. There are five tags that Woopra tracks. Three of them are critical and should be used on all ad traffic: campaign name, source, and medium.\n[block:api-header]\n{\n \"title\": \"Example URL\"\n}\n[/block]\nBelow, you will find an example campaign URL with Woopra tags. This URL represents a banner add on CNN.com with campaign name “promo”.\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"http://www.yourwebsite.com/?woo_campaign=promo&woo_source=cnn&woo_medium=web&woo_content=banner\",\n \"language\": \"text\"\n }\n ]\n}\n[/block]\nIn this example:\n\n- Campaign name is “promo”\n- Campaign source is “CNN”\n- Campaign medium is “web”\n- Campaign content is “banner”\n[block:api-header]\n{\n \"title\": \"Supported URL Tags\"\n}\n[/block]\nThe “woo” tags below can be used to automatically send campaign information as custom event properties to Woopra.\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"**Note:** you may use *utm_ *instead of *woo_ *tags in order to be compatible with your GA tags.\"\n}\n[/block]\n1. **woo_campaign:** This will become custom event property “campaign_name” in Woopra.\n * This is the name of the campaign. Each campaign needs a unique name. Names can vary from a time period like “June” all the way to a product slogan or announcement title. \n2. **woo_source:** This will become custom event property “campaign_source” in Woopra.\n * Campaign Source is where the ad was displayed. If the ad was displayed on Citysearch, this value would be Citysearch. If the ad was on Google, then it would be Google.\n3. **woo_medium:** This will become custom event property “campaign_medium” in Woopra.\n * Campaign Medium is the type of ad that was displayed. For example, this could be a banner ad, email, or even a tweet.\n4. **woo_content:** This will become custom event property “campaign_content” in Woopra.\n * Campaign Content is used to distinguish two very similar ads. For example, if you had a banner ad placed at the top of a page and a banner ad placed along the side, you would want to be able to distinguish between them when analyzing in order to determine which location on the web page was more effective. You could use “topbanner” and “rightsidebanner” to designate each.\n5. **woo_term:**This will become custom event property “campaign_term” in Woopra.\n * Campaign Term can be used to list out the terms purchased for the ad. This is usually specific to Google Adwords. \n\n**Note:** If you have different tags outside of those listed above, you can manually adapt those tags to the script by populating the campaign properties programmatically.\n[block:api-header]\n{\n \"title\": \"Using Campaigns Throughout Woopra\"\n}\n[/block]\nSince these tags are really just properties of your landing pageview event, you will be able to use them throughout Woopra just as you would any other property. They may be used:\n\n- To apply [segmentation](https://docs.woopra.com/docs/segmentation-filters) in Woopra’s analytics reports (e.g. segment a Journey report by all people who came from a campaign with the source “CNN.com”).\n- As a step in the [Journey](https://docs.woopra.com/docs/journeys) (e.g. the first step is set up as all users who came from the campaign with the medium “Web”).\n- As a constraint in the “Compare By” section of [Trends Reports](https://docs.woopra.com/docs/trends-reports) (e.g. you can compare the engagement of users who came from your Facebook campaign vs the users who came from Google AdWords).\n- As an action in the [Retention report](doc:retention) (e.g. the initial action’s constraint is all users who came from a campaign with the name “promo”).\n- As a [Trigger](https://docs.woopra.com/docs/triggers) (e.g. trigger email to customer whenever someone arrives from campaign with the campaign source “CNN.com”).\n[block:api-header]\n{\n \"title\": \"Tag URLs With Visitor Identification Properties\"\n}\n[/block]\nWoopra supports the ability to tag urls to identify customers when they land on your website. If you’re sharing links through private channels like emails, you can append some extra attributes to the URL that identify the person. In order to do so, you should use the* wv_* prefixed attribute. The example below shows you how you can build a URL that automatically identifies the person on Woopra as soon as they click on that link and land on your website:\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"http://mybusiness.com/[email protected]&wv_name=John+Doe\",\n \"language\": \"text\"\n }\n ]\n}\n[/block]\nThe URL above will add the* name* and *email* properties to the visitor’s Customer Profile, identify them, and merge their new profile with their old previous visits if they ever had any.\n\nThis is a great way to manage your email marketing leads and keep your data as accurate as possible.\n[block:api-header]\n{\n \"title\": \"Hide campaign properties from URL\"\n}\n[/block]\nWhen the user lands on your website, you may want to hide the campaign properties from the URL. Woopra uses [HTML5 pushState](https://www.w3.org/TR/2011/WD-html5-20110113/history.html#history-0) to rebuild the URL by removing the campaign properties.\n\nTo activate this feature, you must add the option hide_campaign: true to the config function in your [Woopra JavaScript Tracking Code](https://app.woopra.com/project/~/configure/snippets/javascript).\n[block:api-header]\n{\n \"title\": \"Pixel Tracking For Emails\"\n}\n[/block]\nThis might require some development experience but you can use pixel tracking in emails to track open rates. For more information on how to set this up, visit our [Advanced Tracking documentation](ref:advanced-http-tracking).\n[block:api-header]\n{\n \"title\": \"Additional Reading\"\n}\n[/block]\nStill have questions? Learn more in our blog post, \"[What are UTM Parameters and how to use Them?](https://blog.woopra.com/what-are-utm-parameters-and-how-should-you-use-them-e2257fd0a201)\" and \"[Campaign and Referrer Data. What's the difference?](doc:campaign-and-referrer-data-whats-the-difference).\"","excerpt":"","slug":"campaign-tracking","type":"basic","title":"Campaign Tracking","__v":0,"parentDoc":null,"updatedAt":"2021-12-01T19:57:03.948Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2020-10-22T22:33:25.046Z","deprecated":false,"children":[],"childrenPages":[]},{"_id":"5b070ce4060bee00035d8cc1","excerpt":"","hidden":false,"order":5,"version":"5b070ce4060bee00035d8d12","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"code":"{}","name":"","status":400,"language":"json"}]},"auth":"required","params":[],"url":"","method":"get"},"body":"##Overview\n\nThe Woopra tracking system is designed to be completely customizable, where we track whatever you send us. You can define what is sent after the fact using [Schema](doc:configuring-your-schema). \n\nHowever, the Woopra tracking system does some things automatically when it comes to your data. When sending a tracking event for instance, even if you don't explicitly include the visitor's ip address in the custom event properties, the Woopra system will record the ip from the HTTP request itself. Then, in the case of ip addresses, slightly more data enrichment may occur, such as adding location data (region, etc.), company data (owner of the ip address), and more.\n\nThis section Explains all of the automatic data recording and enrichment that happens in Woopra in all three of the data scopes: [visitor data, visit data, and action data.](doc:generated-visit-properties)","createdAt":"2017-04-06T19:07:38.622Z","slug":"built-in-fields","sync_unique":"","title":"Generated Data Fields","type":"basic","__v":0,"category":"5b15a3dd43fbcf0003acae80","isReference":false,"link_external":false,"link_url":"","parentDoc":null,"updates":[],"githubsync":"","next":{"pages":[],"description":""},"project":"58b721a1f22b830f009a0bcd","user":"5adfa297452bd900036d0f67","updatedAt":"2018-08-06T18:32:30.912Z","metadata":{"title":"","description":"","image":[]},"children":[{"_id":"5b070ce4060bee00035d8cc2","next":{"pages":[],"description":""},"order":3,"parentDoc":"5b070ce4060bee00035d8cc1","project":"58b721a1f22b830f009a0bcd","sync_unique":"","body":"These are the Built in Fields or Properties of Visits (aka. Sessions). This data is associated with a visit, which is a set of actions considered to have occurred in the same session, ie: more or less continuously, without a large time gap in between. For more information on visits\n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"Field Key\",\n \"h-1\": \"Field Name\",\n \"h-2\": \"Description\",\n \"0-0\": \"`city`\",\n \"1-0\": \"`region`\",\n \"7-0\": \"`lng`\",\n \"9-0\": \"`ip`\",\n \"10-0\": \"`screen`\",\n \"11-0\": \"`language`\",\n \"12-0\": \"`os `\",\n \"13-1\": \"\",\n \"13-0\": \"`domain`\",\n \"14-0\": \"`org`\",\n \"15-0\": \"`browser`\",\n \"16-0\": \"`time`\",\n \"17-0\": \"`hour`\",\n \"18-0\": \"`day`\",\n \"19-0\": \"`month`\",\n \"20-0\": \"`quarter`\",\n \"21-0\": \"`year`\",\n \"22-0\": \"`duration`\",\n \"23-0\": \"`referrertype`\",\n \"24-0\": \"`referrerquery`\",\n \"25-0\": \"`referrerurl`\",\n \"26-0\": \"`landingpage`\",\n \"26-2\": \"The path of the url of the first pageview of this visit\",\n \"25-2\": \"\",\n \"24-2\": \"\",\n \"23-2\": \"\",\n \"8-0\": \"`lat`\",\n \"0-2\": \"\",\n \"26-1\": \"The path of the url of the first pageview of this visit\",\n \"25-1\": \"Visit Referrer URL\",\n \"24-1\": \"Visit Referrer Query (for search referrals)\",\n \"23-1\": \"Visit Referrer Type\",\n \"0-1\": \"City of ip address\",\n \"1-1\": \"Region/State/Province of ip address\",\n \"7-1\": \"Estimated Longitude\",\n \"8-1\": \"Estimated Latitude\",\n \"9-1\": \"ip Address\",\n \"10-1\": \"Screen Size/Resolution\",\n \"11-1\": \"Language set in operating system/browser preferences on device.\",\n \"12-1\": \"Operating System of Device\",\n \"14-1\": \"Reported Organization (who owns the ip)\",\n \"15-1\": \"The browser if any, used by the client.\",\n \"4-0\": \"`continent`\",\n \"3-0\": \"`country`\",\n \"3-1\": \"Country of ip Address\",\n \"4-1\": \"Continent of ip Address\",\n \"5-0\": \"`timezone`\",\n \"5-1\": \"Timezone of the estimated location\",\n \"6-0\": \"`offset`\",\n \"6-1\": \"Timezone Offset (ex: +08:00)\",\n \"2-0\": \"`post`\",\n \"2-1\": \"Postal or Zip Code\",\n \"16-1\": \"Time that visit began in UNIX Millisecond Time Format\",\n \"17-1\": \"Hour of the day of visit\",\n \"18-1\": \"Day of the month of visit.\",\n \"19-1\": \"Month of Visit\",\n \"20-1\": \"Quarter (3 month period) of Visit\",\n \"21-1\": \"Year of Visit\",\n \"22-1\": \"Duration of Visit in Milliseconds\"\n },\n \"cols\": 2,\n \"rows\": 27\n}\n[/block]\n#Discussion\nAll of these visit fields are generated by the Woopra tracking engines when logging a visit. They cannot be overridden when sending real-time events. They can be sent, however, when running bulk visit imports using [the Import API](ref:the-import-api). \n\n##Location Data\n(`city`, `region`, `country`, `continent`, `timezone`, `offset`, `lng`, `lat`)\nWoopra uses an ip geolocation service to estimate the location of the device doing the actions that make up a given visit. Geolocation can be very precise in some cases, and very imprecise in others. Sometimes a visit is coming from a serverside tracking event, and the original client device's ip has not been passed along to Woopra. Woopra will then use the ip of whatever device sent us the track request, and that ip will belong to a server in a data center in Dallas, Texas while the user is sitting in a coffee shop in Milwaukee.\n\nNote the longitude and latitude values are not precise. They will usually be the center point of a given city or neighborhood, and are most useful in calculating \"nearby\" users (as numbers that can be passed to geography API's, etc.)\n\nTreat these fields as rough estimates of location that are sometimes correct, and sometimes for any number of reasons, largely privacy concerns and technical limitations, totally wrong. They are often useless at the individual visit level, but will likely approach truth when you report on these fields in aggregate.\n\n##Organization\n(`org`)\nThis field is generated based on ip. It reports the organization that owns the ip. Often, the reported organization of a private visitor (on their home network, e.g.) will be their Internet Service Provider (e.g. Comcast). Woopra tries to not set this field if it thinks it is simply an ISP ip address.\n\nHowever, when a customer comes to your site from a work computer, it is likely that the ip to organization mapping services will accurately report their employer as the owner of that ip.\n\n##Visit Duration \n(`duration`)\nVisit duration is simple in concept, but can become very complex as you consider atypical cases. In its simplest form, Visit duration is the length of time between the first action, and the end of the timeout after the last action. This is calculated using event times and event durations.\n\nThe perfect example of this working is in a browser session tracked by our javascript tracking SDK. The browser tracker makes full use of server pinging, sane default event timeouts, etc. What this means is that every event tracked by our tracker has a duration, and the visit duration is quite simply the sum of the action durations of the actions that make up the visit.\n\nIt gets more complex with serverside events, events brought in by AppConnect apps from other services, and in general, anything not tracked by our tracker in the browser. Certain events have a 0 duration. Other times, it is easy to accidentally send explicit action durations with each action that are actually overlapping, and thus artificially inflating your visit duration. It is also worth noting that the `/ping` requests will automatically be applied to the latest active, non-system action. See [Generated Action Properties](doc:generated-action-properties) for list of system actions. \n\nIf you are looking at a browser session as tracked by a clean implementation of our client side tracking SDK, then you can know for sure that visit duration is as accurate as possible, but unless you are carefully implementing your other tracking with this in mind, don't put too much credibility to this number for other types of visits.\n\n##Referrer information \n(`referrerurl`, `referrerquery`, `referrertype`)\nNote the legacy mis-spelling of the referer field in the HTTP specifications. [Here's a wikipedia article about it](https://en.wikipedia.org/wiki/HTTP_referer). And note our lack of this mis-spelling here.\n\nThe referrer fields are taken from the referrer property of the first action of this visit. If the first action does not have referrer information in it, these fields will be blank.\n\nIf the action is passed with the `referer` property as a complete uri, the Woopra system will parse this uri and extract the domain to guess the type of the referrer, and the query used if it is a search engine referral, and this information is provided. However, this query information is not often provided by search engines anymore.\n\n##Referrer Types\n\n* *Direct* - A visitor that typed in the site directly, opened a desktop app, or had a bookmark.\n* *Internal* - The visitor came from a page within your site that isn’t tracked such as a sub-domain.\n* *Search* - The visitor has come from a search engine such as a Google search.\n* *Backlink* - The visitor came from an external link from another site such as a link in a blog post. \n* *Social* - The visitor came from a social platform such as Facebook.\n* *Email* - The visitor came from a link in an email such as a link in Gmail.\n* *PPC* - The visitor came from an ad link or some marketing campaign. \n[block:callout]\n{\n \"type\": \"warning\",\n \"title\": \"Using referrer can inaccurate\",\n \"body\": \"Please note that using referrer as a filter can be inaccurate. [Please see our doc for more info](https://docs.woopra.com/docs/why-referer-tracking-can-be-inaccurate)\"\n}\n[/block]\nRead more on [Campaign and Referrer Data. What's the difference?](doc:campaign-and-referrer-data-whats-the-difference) \n\n\n\n##Landing Pages \n(`landingpage`)\nThe landing page from the scope of a visit is the url of the first pageview of a visit. This does not mean that this is one of your pages that you consider to be a landing page, it means it is the first page the visitor landed on to start this visit.\n\nSo this generated field is the url of the page that was first seen by the visitor in this visit specifically.","link_external":false,"title":"Generated Visit Properties","user":"5adfa297452bd900036d0f67","version":"5b070ce4060bee00035d8d12","createdAt":"2017-04-06T19:07:53.971Z","hidden":false,"excerpt":"System-Generated Visit Properties","isReference":false,"link_url":"","slug":"generated-visit-properties","updates":[],"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"category":"5b15a3dd43fbcf0003acae80","githubsync":"","type":"basic","__v":0,"updatedAt":"2021-12-01T19:56:05.661Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2020-10-22T18:48:43.037Z","deprecated":false},{"_id":"5b070ce4060bee00035d8d10","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15a3dd43fbcf0003acae80","parentDoc":"5b070ce4060bee00035d8cc1","user":"5adfa297452bd900036d0f67","updates":["5d1c85cc87a10c00660fe248"],"next":{"pages":[],"description":""},"createdAt":"2018-05-23T21:07:59.930Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"language":"json","code":"{}","name":"","status":200},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":4,"body":"These are the Built in Fields or Properties of Actions. This data is associated with an Action.\n\n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"Field Key\",\n \"h-1\": \"Field Name\",\n \"h-2\": \"Field Description\",\n \"5-0\": \"~y\",\n \"5-1\": \"Action ID\",\n \"5-2\": \"Universal unique action identifier.\",\n \"4-0\": \"~z\",\n \"4-1\": \"Action Type\",\n \"4-2\": \"could be passive(value is 1) or generated(value is 2) or default (undefined)\",\n \"3-0\": \"~u\",\n \"3-1\": \"Action Duration\",\n \"3-2\": \"Duration in seconds when applicable (Woopra automatically generates duration for page views)\",\n \"2-0\": \"~s\",\n \"2-2\": \"Action was tracked over Https or SSL.\",\n \"2-1\": \"Is secure\",\n \"1-0\": \"~p\",\n \"1-1\": \"App\",\n \"1-2\": \"Tracking app/SDK name. Default is js.client.\",\n \"7-0\": \"~o\",\n \"6-0\": \"~i\",\n \"6-1\": \"Is the first action in session\",\n \"7-1\": \"Is the last action in session\",\n \"6-2\": \"Value is 1 if this is the first action in this session. Not set/ Undefined otherwise.\",\n \"7-2\": \"Value is 1 if this is the last action in this session. Not set / Undefined otherwise.\",\n \"0-0\": \"~m\",\n \"0-1\": \"Action Time\",\n \"0-2\": \"Timestamp In Unix converted to milliseconds.\",\n \"8-0\": \"~d\",\n \"8-1\": \"Subdomain\",\n \"8-2\": \"Subdomain of the event url - Automatically generated for page views.\"\n },\n \"cols\": 3,\n \"rows\": 9\n}\n[/block]\n## Action Types Defined\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/384de8a-7c793e4-Image_2018-07-18_at_11.52.40_AM.png\",\n \"7c793e4-Image_2018-07-18_at_11.52.40_AM.png\",\n 1232,\n 542,\n \"#e6effa\"\n ],\n \"caption\": \"You may want to include or exclude certain Action Types.\"\n }\n ]\n}\n[/block]\n* **Generated Action Types**: These are system actions such as property updates, label join, label leave. These events are automatically flagged as \"Generated.\"\n* **Passive Action Types**: Developers can choose to flag actions as \"Passive.\" These are typically serverside actions or background events that are tracked on the user's behalf.\n* **Default Action Types**: Anything not \"Generate\" or marked as \"Passive\" will be Default Action Types. These include pageviews, download, outgoing.","excerpt":"","slug":"generated-action-properties","type":"basic","title":"Generated Action Properties","__v":1,"updatedAt":"2019-08-06T19:26:31.855Z","metadata":{"title":"","description":"","image":[]}},{"_id":"5b070ce4060bee00035d8cc6","isReference":false,"link_external":false,"title":"Fields with Special Behaviors","type":"basic","updates":[],"__v":0,"body":"[block:callout]\n{\n \"type\": \"warning\",\n \"title\": \"Warning\",\n \"body\": \"In the latest version of Woopra, some of these fields, for instance campaign fields, have changed the way they work in the Woopra Interface.\"\n}\n[/block]\nThere are a number of visitor, visit, and action property keys that, if sent as part of the tracking request, will cause some special behavior in the Woopra UI. For instance, sending `campaign_name` as an action property will actually allow it to be picked up by the system for campaign reporting, and will also show the action's campaign in the interface differently from the rest of the action properties.\n\nHere is a list of fields that have some special behavior by convention:\n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"Field Name\",\n \"h-2\": \"Special Behavior\",\n \"h-1\": \"Property Scope\",\n \"0-0\": \"`url`\",\n \"h-3\": \"Discussion\",\n \"0-1\": \"Event Property\",\n \"0-2\": \"Parsed for pageview data, campaign data, etc.\",\n \"0-3\": \"Woopra will read `utm_` and `woo_` tags, and include them as campaign data for the action.\",\n \"1-0\": \"`campaign_name`\",\n \"1-1\": \"Event Property\",\n \"1-2\": \"Treated as campaign attribution data\",\n \"1-3\": \"Woopra displays campaign data specially in each event that has it so as to make attribution clearer. Also, this data when sent with any event, will be used to generate the new Attribution Reports.\",\n \"2-0\": \"`campaign_id`\",\n \"3-0\": \"`campaign_source`\",\n \"4-0\": \"`campaign_medium`\",\n \"5-0\": \"`campaign_content`\",\n \"6-0\": \"`campaign_term`\",\n \"2-1\": \"Event Property\",\n \"3-1\": \"Event Property\",\n \"4-1\": \"Event Property\",\n \"5-1\": \"Event Property\",\n \"6-1\": \"Event Property\",\n \"2-2\": \"Treated as campaign attribution data\",\n \"3-2\": \"Treated as campaign attribution data\",\n \"4-2\": \"Treated as campaign attribution data\",\n \"5-2\": \"Treated as campaign attribution data\",\n \"6-2\": \"Treated as campaign attribution data\",\n \"6-3\": \"\",\n \"5-3\": \"\"\n },\n \"cols\": 4,\n \"rows\": 7\n}\n[/block]","createdAt":"2017-04-24T18:31:54.077Z","order":5,"sync_unique":"","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","api":{"method":"get","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":""},"category":"5b15a3dd43fbcf0003acae80","githubsync":"","hidden":false,"parentDoc":"5b070ce4060bee00035d8cc1","user":"5adfa297452bd900036d0f67","excerpt":"","link_url":"","next":{"pages":[],"description":""},"slug":"conventional-fields","updatedAt":"2019-09-27T19:55:49.038Z","metadata":{"title":"","description":"","image":[]}}],"childrenPages":[{"_id":"5b070ce4060bee00035d8cc2","next":{"pages":[],"description":""},"order":3,"parentDoc":"5b070ce4060bee00035d8cc1","project":"58b721a1f22b830f009a0bcd","sync_unique":"","body":"These are the Built in Fields or Properties of Visits (aka. Sessions). This data is associated with a visit, which is a set of actions considered to have occurred in the same session, ie: more or less continuously, without a large time gap in between. For more information on visits\n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"Field Key\",\n \"h-1\": \"Field Name\",\n \"h-2\": \"Description\",\n \"0-0\": \"`city`\",\n \"1-0\": \"`region`\",\n \"7-0\": \"`lng`\",\n \"9-0\": \"`ip`\",\n \"10-0\": \"`screen`\",\n \"11-0\": \"`language`\",\n \"12-0\": \"`os `\",\n \"13-1\": \"\",\n \"13-0\": \"`domain`\",\n \"14-0\": \"`org`\",\n \"15-0\": \"`browser`\",\n \"16-0\": \"`time`\",\n \"17-0\": \"`hour`\",\n \"18-0\": \"`day`\",\n \"19-0\": \"`month`\",\n \"20-0\": \"`quarter`\",\n \"21-0\": \"`year`\",\n \"22-0\": \"`duration`\",\n \"23-0\": \"`referrertype`\",\n \"24-0\": \"`referrerquery`\",\n \"25-0\": \"`referrerurl`\",\n \"26-0\": \"`landingpage`\",\n \"26-2\": \"The path of the url of the first pageview of this visit\",\n \"25-2\": \"\",\n \"24-2\": \"\",\n \"23-2\": \"\",\n \"8-0\": \"`lat`\",\n \"0-2\": \"\",\n \"26-1\": \"The path of the url of the first pageview of this visit\",\n \"25-1\": \"Visit Referrer URL\",\n \"24-1\": \"Visit Referrer Query (for search referrals)\",\n \"23-1\": \"Visit Referrer Type\",\n \"0-1\": \"City of ip address\",\n \"1-1\": \"Region/State/Province of ip address\",\n \"7-1\": \"Estimated Longitude\",\n \"8-1\": \"Estimated Latitude\",\n \"9-1\": \"ip Address\",\n \"10-1\": \"Screen Size/Resolution\",\n \"11-1\": \"Language set in operating system/browser preferences on device.\",\n \"12-1\": \"Operating System of Device\",\n \"14-1\": \"Reported Organization (who owns the ip)\",\n \"15-1\": \"The browser if any, used by the client.\",\n \"4-0\": \"`continent`\",\n \"3-0\": \"`country`\",\n \"3-1\": \"Country of ip Address\",\n \"4-1\": \"Continent of ip Address\",\n \"5-0\": \"`timezone`\",\n \"5-1\": \"Timezone of the estimated location\",\n \"6-0\": \"`offset`\",\n \"6-1\": \"Timezone Offset (ex: +08:00)\",\n \"2-0\": \"`post`\",\n \"2-1\": \"Postal or Zip Code\",\n \"16-1\": \"Time that visit began in UNIX Millisecond Time Format\",\n \"17-1\": \"Hour of the day of visit\",\n \"18-1\": \"Day of the month of visit.\",\n \"19-1\": \"Month of Visit\",\n \"20-1\": \"Quarter (3 month period) of Visit\",\n \"21-1\": \"Year of Visit\",\n \"22-1\": \"Duration of Visit in Milliseconds\"\n },\n \"cols\": 2,\n \"rows\": 27\n}\n[/block]\n#Discussion\nAll of these visit fields are generated by the Woopra tracking engines when logging a visit. They cannot be overridden when sending real-time events. They can be sent, however, when running bulk visit imports using [the Import API](ref:the-import-api). \n\n##Location Data\n(`city`, `region`, `country`, `continent`, `timezone`, `offset`, `lng`, `lat`)\nWoopra uses an ip geolocation service to estimate the location of the device doing the actions that make up a given visit. Geolocation can be very precise in some cases, and very imprecise in others. Sometimes a visit is coming from a serverside tracking event, and the original client device's ip has not been passed along to Woopra. Woopra will then use the ip of whatever device sent us the track request, and that ip will belong to a server in a data center in Dallas, Texas while the user is sitting in a coffee shop in Milwaukee.\n\nNote the longitude and latitude values are not precise. They will usually be the center point of a given city or neighborhood, and are most useful in calculating \"nearby\" users (as numbers that can be passed to geography API's, etc.)\n\nTreat these fields as rough estimates of location that are sometimes correct, and sometimes for any number of reasons, largely privacy concerns and technical limitations, totally wrong. They are often useless at the individual visit level, but will likely approach truth when you report on these fields in aggregate.\n\n##Organization\n(`org`)\nThis field is generated based on ip. It reports the organization that owns the ip. Often, the reported organization of a private visitor (on their home network, e.g.) will be their Internet Service Provider (e.g. Comcast). Woopra tries to not set this field if it thinks it is simply an ISP ip address.\n\nHowever, when a customer comes to your site from a work computer, it is likely that the ip to organization mapping services will accurately report their employer as the owner of that ip.\n\n##Visit Duration \n(`duration`)\nVisit duration is simple in concept, but can become very complex as you consider atypical cases. In its simplest form, Visit duration is the length of time between the first action, and the end of the timeout after the last action. This is calculated using event times and event durations.\n\nThe perfect example of this working is in a browser session tracked by our javascript tracking SDK. The browser tracker makes full use of server pinging, sane default event timeouts, etc. What this means is that every event tracked by our tracker has a duration, and the visit duration is quite simply the sum of the action durations of the actions that make up the visit.\n\nIt gets more complex with serverside events, events brought in by AppConnect apps from other services, and in general, anything not tracked by our tracker in the browser. Certain events have a 0 duration. Other times, it is easy to accidentally send explicit action durations with each action that are actually overlapping, and thus artificially inflating your visit duration. It is also worth noting that the `/ping` requests will automatically be applied to the latest active, non-system action. See [Generated Action Properties](doc:generated-action-properties) for list of system actions. \n\nIf you are looking at a browser session as tracked by a clean implementation of our client side tracking SDK, then you can know for sure that visit duration is as accurate as possible, but unless you are carefully implementing your other tracking with this in mind, don't put too much credibility to this number for other types of visits.\n\n##Referrer information \n(`referrerurl`, `referrerquery`, `referrertype`)\nNote the legacy mis-spelling of the referer field in the HTTP specifications. [Here's a wikipedia article about it](https://en.wikipedia.org/wiki/HTTP_referer). And note our lack of this mis-spelling here.\n\nThe referrer fields are taken from the referrer property of the first action of this visit. If the first action does not have referrer information in it, these fields will be blank.\n\nIf the action is passed with the `referer` property as a complete uri, the Woopra system will parse this uri and extract the domain to guess the type of the referrer, and the query used if it is a search engine referral, and this information is provided. However, this query information is not often provided by search engines anymore.\n\n##Referrer Types\n\n* *Direct* - A visitor that typed in the site directly, opened a desktop app, or had a bookmark.\n* *Internal* - The visitor came from a page within your site that isn’t tracked such as a sub-domain.\n* *Search* - The visitor has come from a search engine such as a Google search.\n* *Backlink* - The visitor came from an external link from another site such as a link in a blog post. \n* *Social* - The visitor came from a social platform such as Facebook.\n* *Email* - The visitor came from a link in an email such as a link in Gmail.\n* *PPC* - The visitor came from an ad link or some marketing campaign. \n[block:callout]\n{\n \"type\": \"warning\",\n \"title\": \"Using referrer can inaccurate\",\n \"body\": \"Please note that using referrer as a filter can be inaccurate. [Please see our doc for more info](https://docs.woopra.com/docs/why-referer-tracking-can-be-inaccurate)\"\n}\n[/block]\nRead more on [Campaign and Referrer Data. What's the difference?](doc:campaign-and-referrer-data-whats-the-difference) \n\n\n\n##Landing Pages \n(`landingpage`)\nThe landing page from the scope of a visit is the url of the first pageview of a visit. This does not mean that this is one of your pages that you consider to be a landing page, it means it is the first page the visitor landed on to start this visit.\n\nSo this generated field is the url of the page that was first seen by the visitor in this visit specifically.","link_external":false,"title":"Generated Visit Properties","user":"5adfa297452bd900036d0f67","version":"5b070ce4060bee00035d8d12","createdAt":"2017-04-06T19:07:53.971Z","hidden":false,"excerpt":"System-Generated Visit Properties","isReference":false,"link_url":"","slug":"generated-visit-properties","updates":[],"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"category":"5b15a3dd43fbcf0003acae80","githubsync":"","type":"basic","__v":0,"updatedAt":"2021-12-01T19:56:05.661Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2020-10-22T18:48:43.037Z","deprecated":false},{"_id":"5b070ce4060bee00035d8d10","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15a3dd43fbcf0003acae80","parentDoc":"5b070ce4060bee00035d8cc1","user":"5adfa297452bd900036d0f67","updates":["5d1c85cc87a10c00660fe248"],"next":{"pages":[],"description":""},"createdAt":"2018-05-23T21:07:59.930Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"language":"json","code":"{}","name":"","status":200},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":4,"body":"These are the Built in Fields or Properties of Actions. This data is associated with an Action.\n\n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"Field Key\",\n \"h-1\": \"Field Name\",\n \"h-2\": \"Field Description\",\n \"5-0\": \"~y\",\n \"5-1\": \"Action ID\",\n \"5-2\": \"Universal unique action identifier.\",\n \"4-0\": \"~z\",\n \"4-1\": \"Action Type\",\n \"4-2\": \"could be passive(value is 1) or generated(value is 2) or default (undefined)\",\n \"3-0\": \"~u\",\n \"3-1\": \"Action Duration\",\n \"3-2\": \"Duration in seconds when applicable (Woopra automatically generates duration for page views)\",\n \"2-0\": \"~s\",\n \"2-2\": \"Action was tracked over Https or SSL.\",\n \"2-1\": \"Is secure\",\n \"1-0\": \"~p\",\n \"1-1\": \"App\",\n \"1-2\": \"Tracking app/SDK name. Default is js.client.\",\n \"7-0\": \"~o\",\n \"6-0\": \"~i\",\n \"6-1\": \"Is the first action in session\",\n \"7-1\": \"Is the last action in session\",\n \"6-2\": \"Value is 1 if this is the first action in this session. Not set/ Undefined otherwise.\",\n \"7-2\": \"Value is 1 if this is the last action in this session. Not set / Undefined otherwise.\",\n \"0-0\": \"~m\",\n \"0-1\": \"Action Time\",\n \"0-2\": \"Timestamp In Unix converted to milliseconds.\",\n \"8-0\": \"~d\",\n \"8-1\": \"Subdomain\",\n \"8-2\": \"Subdomain of the event url - Automatically generated for page views.\"\n },\n \"cols\": 3,\n \"rows\": 9\n}\n[/block]\n## Action Types Defined\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/384de8a-7c793e4-Image_2018-07-18_at_11.52.40_AM.png\",\n \"7c793e4-Image_2018-07-18_at_11.52.40_AM.png\",\n 1232,\n 542,\n \"#e6effa\"\n ],\n \"caption\": \"You may want to include or exclude certain Action Types.\"\n }\n ]\n}\n[/block]\n* **Generated Action Types**: These are system actions such as property updates, label join, label leave. These events are automatically flagged as \"Generated.\"\n* **Passive Action Types**: Developers can choose to flag actions as \"Passive.\" These are typically serverside actions or background events that are tracked on the user's behalf.\n* **Default Action Types**: Anything not \"Generate\" or marked as \"Passive\" will be Default Action Types. These include pageviews, download, outgoing.","excerpt":"","slug":"generated-action-properties","type":"basic","title":"Generated Action Properties","__v":1,"updatedAt":"2019-08-06T19:26:31.855Z","metadata":{"title":"","description":"","image":[]}},{"_id":"5b070ce4060bee00035d8cc6","isReference":false,"link_external":false,"title":"Fields with Special Behaviors","type":"basic","updates":[],"__v":0,"body":"[block:callout]\n{\n \"type\": \"warning\",\n \"title\": \"Warning\",\n \"body\": \"In the latest version of Woopra, some of these fields, for instance campaign fields, have changed the way they work in the Woopra Interface.\"\n}\n[/block]\nThere are a number of visitor, visit, and action property keys that, if sent as part of the tracking request, will cause some special behavior in the Woopra UI. For instance, sending `campaign_name` as an action property will actually allow it to be picked up by the system for campaign reporting, and will also show the action's campaign in the interface differently from the rest of the action properties.\n\nHere is a list of fields that have some special behavior by convention:\n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"Field Name\",\n \"h-2\": \"Special Behavior\",\n \"h-1\": \"Property Scope\",\n \"0-0\": \"`url`\",\n \"h-3\": \"Discussion\",\n \"0-1\": \"Event Property\",\n \"0-2\": \"Parsed for pageview data, campaign data, etc.\",\n \"0-3\": \"Woopra will read `utm_` and `woo_` tags, and include them as campaign data for the action.\",\n \"1-0\": \"`campaign_name`\",\n \"1-1\": \"Event Property\",\n \"1-2\": \"Treated as campaign attribution data\",\n \"1-3\": \"Woopra displays campaign data specially in each event that has it so as to make attribution clearer. Also, this data when sent with any event, will be used to generate the new Attribution Reports.\",\n \"2-0\": \"`campaign_id`\",\n \"3-0\": \"`campaign_source`\",\n \"4-0\": \"`campaign_medium`\",\n \"5-0\": \"`campaign_content`\",\n \"6-0\": \"`campaign_term`\",\n \"2-1\": \"Event Property\",\n \"3-1\": \"Event Property\",\n \"4-1\": \"Event Property\",\n \"5-1\": \"Event Property\",\n \"6-1\": \"Event Property\",\n \"2-2\": \"Treated as campaign attribution data\",\n \"3-2\": \"Treated as campaign attribution data\",\n \"4-2\": \"Treated as campaign attribution data\",\n \"5-2\": \"Treated as campaign attribution data\",\n \"6-2\": \"Treated as campaign attribution data\",\n \"6-3\": \"\",\n \"5-3\": \"\"\n },\n \"cols\": 4,\n \"rows\": 7\n}\n[/block]","createdAt":"2017-04-24T18:31:54.077Z","order":5,"sync_unique":"","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","api":{"method":"get","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":""},"category":"5b15a3dd43fbcf0003acae80","githubsync":"","hidden":false,"parentDoc":"5b070ce4060bee00035d8cc1","user":"5adfa297452bd900036d0f67","excerpt":"","link_url":"","next":{"pages":[],"description":""},"slug":"conventional-fields","updatedAt":"2019-09-27T19:55:49.038Z","metadata":{"title":"","description":"","image":[]}}]},{"_id":"5b19bcfbb3baf90003cabc38","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15a3dd43fbcf0003acae80","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-07T23:17:15.450Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":6,"body":"[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Custom Identifiers and Hierarchy\",\n \"body\": \"If you want to add your own identifiers to be used for merging or to adjust the hierarchy, please reach out to [email protected].\"\n}\n[/block]\n#Unique Identifiers and Generated People Profiles\nA unique identifier is simply a numeric or alphanumeric string that is associated with a single entry within a given system.\n\nWoopra has an advanced ID mapping system that allows it to use many different fields to uniquely refer to an individual profile. When identifying an individual, Woopra will track them as an anonymous visitor until they are identified in some way. We recommend using Email as the unique identifier. You can identify users using [woopra.identify()](https://docs.woopra.com/reference#woopraidentify). \n\n##Anonymous id and cookies\nWoopra will track anonymous visitors automatically with the tracking code. A profile will be auto generated for these users until they are identified by your tracking. With the cookie, users will be identified as Visitor #XXXXX and will be tracked on any page that you have setup Woopra to track.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/76c83a9-Image_2018-06-07_at_4.10.21_PM.png\",\n \"Image 2018-06-07 at 4.10.21 PM.png\",\n 2492,\n 1314,\n \"#fafafc\"\n ]\n }\n ]\n}\n[/block]\n##Unique id\n**By Email:** Woopra recommends identifying individuals by email as a best practice. Using email as a unique identifier will allow you to better track the complete user's journey across all sites and mediums. This will allow for better tracking through our various integrations as well. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/4cc10a8-Image_2018-06-07_at_4.11.22_PM.png\",\n \"Image 2018-06-07 at 4.11.22 PM.png\",\n 2494,\n 1246,\n \"#f8f8fb\"\n ]\n }\n ]\n}\n[/block]\n**By Custom ID: **Alternatively, you can track by some other type of unique identifier such as an internally generated id. You may want to use this method when you do not want to share the users email. You can hash the email as well and pass it as an id. \n\n##Custom ID system (Enterprise only)\nIf you have a unique or specific id system, the Woopra team can work with you to customize your tracking. Please contact our [email protected] to discuss options. \n\n#Profile Merging\nWhen an individual first visits your site, they will be an anonymous visitor. This will create a unique Visitor Profile and will track them via a cookie. Once they are identified, their profile will be updated with their visitor properties.\n\nIf there are multiple profiles for the same user, Woopra will automatically merge these profiles based on a unique id or cookie and based on the ID [hierarchy](https://docs.woopra.com/docs/profile-id-system#section-the-hierarchy). \n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"ID hierarchy from lowest to highest\",\n \"body\": \"Browser cookie --The Lowest order id.\\nAny Custom Identifiers ...\\nEmail Address\\nID (cv_id, external database id)\"\n}\n[/block]\nAll individual profiles are under a PID which is the visitor's profile ID in Woopra. Generally, PID is only used with our [data query API](https://docs.woopra.com/reference#the-reporting-api). \n\nThat said, Woopra will automatically merge separate PID profiles based on a unique id such as an email. For example, a user creates an account on your site and you update the visitor properties in Woopra and identify them as [email protected]. You also have a Hubspot integration that has previously imported this user into Woopra creating a unique profile. There now exists two separate profiles for the same user. Woopra will then merge these two profiles into a single profile while keeping all the historical actions from both profiles.","excerpt":"","slug":"unique-identifiers-and-profile-merging","type":"basic","title":"Unique Identifiers and Profile Merging","__v":0,"parentDoc":null,"updatedAt":"2020-06-15T23:10:34.527Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"children":[],"childrenPages":[]},{"_id":"5b58ebbd4f4a1200030e66a4","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15a3dd43fbcf0003acae80","user":"5adfa297452bd900036d0f67","parentDoc":null,"updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-07-25T21:29:33.975Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":7,"body":"Woopra has an advanced ID mapping system that allows it to use many different fields to uniquely refer to an individual profile. The Basic Concepts section will introduce some conventional database concepts and Woopra's challenges. Then we will dive into how Woopra's ID system works and how to make the best use of it.\n\n#Basic Concepts and Problems\n\n## Unique Identifiers\nIn the realm of database systems, a unique identifier is a field on database entities, the particular value of which is guaranteed to uniquely refer to a single entity in that database. If you think of a database as a table of rows and columns, each column is a field, and each row is a particular entity in the table. The unique ID is a column that holds a value that is different for each row and can be used to unequivocally refer to that single row. In Woopra's profile database system, you can think of a row as a single profile.\n\nA unique identifier is special in that only one database entity may have a given id value, so it can be used to find one specific entity.\n\n## Primary Unique Identifiers\nIn SQL databases, the concept of a Primary Key refers to this idea of a unique identifier. Primary keys refer to a single SQL row and is guaranteed to be unique for each row, and every row is guaranteed to have one.\n\n## The ID Field, identifiers, and cv_id: a quick glossarial note\nThere is some necessary but unfortunate equivocation in the terminology we use here: `ID`. There is the concept of an identifier, which could be a database ID field, or could be some other identifying field like an email address, or even a cookie. Then there is the value of one of these identifiers which might be referred to as a person's or profile's ID, email ID, device ID (i.e. cookie), etc. \n\nThen there is the actual ID field per se, which is the highest order identifier in the Woopra ID hierarchy. Due to how this ID field is sent in the tracking SDK code, we sometimes refer to this highest order Woopra identifier as `cv_id`.\n\nIf you find any places in the text where the context cannot help you overcome the equivocation, please let us know by clicking \"Suggest an Edit\" above, and letting us know what needs clarification.\n\n## Woopra's Challenges\nThe Woopra system faces a number of challenges that traditional SQL database concepts do not help solve, and often even actively stand in the way of resolving. We will limit this discussion to the problem of uniquely identifying tracked person profiles in Woopra. \n\nThe Woopra system needs to be able to tell which person profile performed an incoming tracked action (or property update.) The problem is that people in Woopra can exist in a number of different levels of being identified. They could be a first-time anonymous visitor to a website, or a long time paying customer.\n\nSometimes a person will make a few visits to your site anonymously over a year leading up to the time they decide to sign up for your newsletter, giving you their email. Sometimes this can even mean that what was previously considered to be two different people in Woopra, is now known to be a single person--perhaps originally from two devices--requiring a merge of the two profiles.\n\nIn the traditional database world, merging two rows with different identifiers is a messy business (Which primary unique identifier is kept? What if a database user asks for the row with an ID that was removed?) Additionally, because every row must have an ID, you cannot wait until you know that all of a single person's actions and traits are in the one database row that represents them.\n\nAnother issue is that if you want to track anonymous behavior, and even attribute it to known people in the future as they identify themselves to you--a key value proposition in the Woopra system--then using a single id value per person become more complex.\n\nSimilarly, if you want to track behavior across channels--another key value proposition of Woopra--then it is basically impossible to maintain the database ID for the profile between your website, and, say, your email marketing automation service.\n\nThese and other more nuanced issues make this problem of identifiers significant in the Woopra System. Woopra solves this problem by dedicating an entire sub-system to managing identifiers. \n\n## The Goal\nWoopra needs to be able to take whatever information is available about a person performing the action in an incoming track request, and use it to determine with the highest accuracy possible, which other actions this person has performed, and thus to which profile the incoming actions belong. \n\nIf a user is coming anonymously to your website, all you have is a cookie, which is conceptually, a device ID pointing to that browser on that machine. It will be the same next time the person visits your site from that machine and that browser, but if they visit from a different browser, or on their phone, for instance, you will have a new cookie. So Woopra needs to be able to use multiple cookies to eventually refer to one person, assuming that one day you find out who that person is and can associate all their devices with them.\n\nSimilarly, you may have an incoming \"Email Sent\" event from your email marketing tool that is not from a browser and has no cookie. This event has an email address--another major identifier. Woopra needs to eventually (when the person signs in with that email address on their browser with that cookie they had in the past) be able to consider the actions performed by cookie 1, cookie 2, and email 1 all to belong to the same profile.\n\n# Woopra's Multi-ID System\nWoopra's profile ID system adds a dimension to traditional database identifiers by allowing multiple different identifier fields. The ID fields exist in a hierarchy and are stored in their own database that associates or \"maps\" person profiles to the values of various identifiers in the ID hierarchy that have been given to a person.\n\n### (Aside) Mapping\nIn Computer Science, a Map or Mapping, (or hash map) is a data structure that associates values. Again you can think of a map as a two-column table, with each row containing values considered to be related. Similarly to how a geographical map can help you get from point A to point B, Woopra's data structure map of identifiers can help you get from one identifier, say a person's *email* to another, like a browser *cookie*.\n\n## Identifiers in Woopra\nWhen it comes down to it, an identifier is a visitor property with some special behavior. There are a number of different identifiers that it makes sense to use in the context of customer data. Woopra has a few of these pre-defined in all Woopra instances. Here they are in increasing position in the ID hierarchy:\n\n - Browser cookie --The Lowest order id.\n - Any Custom Identifiers ...\n - Email Address\n - ID (cv_id, external database id)\n\nWhile the above values are built-in to the Woopra system, Woopra is not limited to a predetermined set of Identifiers. In fact, enterprise users can define custom unique identifiers as well. This allows you to use identifiers from external contact management systems, for instance. \n\nAlso, some integrations, for example, those that send phone events to your Woopra (Sonar, Bellgram, Ringostat, Routee) will create custom identifiers for you, like a phone number. This way, when a track request comes in saying that a person with phone number 239-4567 sent a text to your support team, the Woopra system can determine to which profile this event belongs.\n\n## The Hierarchy\nAs mentioned above, Woopra maintains a hierarchy of multiple identifiers and has an entire sub-system dedicated to maintaining the mappings between them. The hierarchy itself determines which identifier takes precedence in determining which profile is referenced.\n\n### Assigning Events\nThe first and most obvious thing that the ID system needs to do is to determine the profile on which a newly tracked event should go. A tracking event must come in with at least one visitor identifier, or else it will be dropped on the grounds that Woopra cannot know *who* did the event. This identifier is submitted to the ID system and the ID system returns the profile to which that event logically belongs. \n\nIf there are multiple identifiers on a track request, two things happen. First, Woopra selects the highest-order identifier from the ID hierarchy, and submits it to the ID system to find the appropriate profile as normal. Second, Woopra tells the ID system that these two identifiers should point to the same profile, and a cascade of updates in the system are possible.\n\nFirst, the two IDs are mapped to the ID system. So, for instance, the system notes that cookie `abcd123` and email `[email protected]` belong to the same user and should point to the same profile. From now on, a tracked event with either one of these IDs--whether or not the other ID is present--will go to this profile.\n\nThen, if this mapping is new, the system looks to see if each ID previously pointed to its own separate profile. If so, a profile merge occurs. This can be a very complex process and it is not really reversible.","excerpt":"","slug":"profile-id-system","type":"basic","title":"Woopra's People Profile ID System","__v":0,"updatedAt":"2019-05-14T22:38:15.277Z","metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"5b070ce4060bee00035d8caf","category":"5b15a3dd43fbcf0003acae80","githubsync":"","link_external":false,"next":{"pages":[],"description":""},"title":"SPAs","body":"Installing tracking code in Single Page Applications is slightly more complicated in that you cannot simply copy the tracking code and paste it into your page `<head>`. This is because the idea of an SPA is that the page head is not reloaded all the time, but rather just parts of the page are updated based on data-only (not full page html) requests made in the background. \n\nIf you have developers implementing custom event tracking, you shouldn't have a problem with this, as an SPA developer should be intimately familiar with this issue as it's core to the concept of SPA's.\n\n## Suggestions\n### The Snippet and the Config: in the `<head>`\nYou'll probably still want to load the [The Javascript Snippet](ref:the-javascript-snippet) in your page `<head>`, along with your tracker configuration (e.g.: `woopra.config()`). You'll be unable to track all of your visitor's behavior if you simply put your tracking code (e.g.: `woopra.track()`) in the `<head>` area though because it will only run once at page load, and subsequent actions taken by the user in your web-app will not be automatically re-tracked.\n\n### Where to Track\nThis means you will have to implement some level of custom tracking, even if you aren't creating custom events, you will still need to put your calls to `woopra.track()` into the event handler functions that are relevant. For instance, if you are a media content site, and you have a handler function that runs when a new article is loaded, THAT is where you want to put your call to `woopra.track()`, maybe even while you're at it, adding a custom event to the call:\n\n```javascript\nwoopra.track('article view', {\n author: 'Ralph Samuel',\n topic: 'Tracking Implementations',\n title: document.title,\n url: window.location.href\n})\n```","link_url":"","order":8,"sync_unique":"","updates":[],"user":"58efd9a346e6d30f000e8f0f","version":"5b070ce4060bee00035d8d12","__v":0,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"excerpt":"Tips for Tracking in Single Page Applications","hidden":false,"parentDoc":null,"project":"58b721a1f22b830f009a0bcd","isReference":false,"slug":"spas","type":"basic","createdAt":"2017-03-08T00:45:07.255Z","updatedAt":"2018-08-09T01:08:52.587Z","metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"5b070ce4060bee00035d8ce1","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","category":"5b15a3dd43fbcf0003acae80","user":"560a2cc087b71d0d000d3a44","updates":[],"next":{"pages":[],"description":""},"createdAt":"2017-08-16T20:47:17.007Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":9,"body":"#Common Issues\n##Tracking Unidentified Users\nThe key to tracking events and properties of an individual is having an identifier that you can use to uniquely identify the visitor. In the case of \"unidentified\" users who come to your website, the identifier that Woopra uses is the cookie stored on the visitor's browser. The cookie is the lowest order of identifier in [Woopra's Profile ID System](doc:profile-id-system). \n\nAs you learn more about a person, and get more unique identifiers for them, such as their email, you call `identify()` with those values, and Woopra will create a \"mapping\" for these identifiers. Whenever you send a track event or an identify call to woopra, it determines to whom the data is relevant based on this mapping of ids.\n\nIf you do not have any identifiers for a person who has visited your website, but still want to `track` actions or `identify` traits on their profile from your server or another system, then you need to use the cookie to identify them. So you need to pass the Woopra cookie to your back end in order to use as an identifier for future calls.\n\nThe Woopra cookie can be accessed on the browser by `window.woopra.cookie`. Currently there is no function that calls a callback in case the cookie has not yet been set, so that logic must be handled by you.\n\nOnce you have that value on your server, you can then identify more traits about the visitor from your back end system simply by including that cookie in the request to the Woopra server. Please note that the cookie, is not a visitor property. As such, it should not be sent in the visitor object next to, eg: `name`, but rather on the track request itself. If you are using the [HTTP Tracking API](ref:intro-http-tracking), this means that you do not prefix the cookie field in the request with `cv_` or `cs_`. If you are using an SDK, you will have to look into the specific SDK documentation to determine how to send the cookie. If you are using Segment, [see their docs](https://segment.com/docs/destinations/woopra/#tying-server-side-events-to-client-side-sessions).","excerpt":"General discussion and Common issues in Server-side Tracking","slug":"serverside-tracking","type":"basic","title":"Serverside Tracking","__v":0,"parentDoc":null,"updatedAt":"2019-09-27T19:55:49.040Z","metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]}]},{"_id":"5dc9c13d6d53e600565383ce","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","isAPI":false,"reference":false,"createdAt":"2019-11-11T20:14:53.330Z","order":9,"slug":"data-loader","title":"Data Loader","__v":0,"pages":[{"_id":"5dc9c1bd2988620033e3b8d3","version":"5b070ce4060bee00035d8d12","updatedAt":"2021-03-05T20:33:11.936Z","createdAt":"2019-11-11T20:17:01.359Z","project":"58b721a1f22b830f009a0bcd","user":"5adfa297452bd900036d0f67","category":"5dc9c13d6d53e600565383ce","updates":["61113e83dfa87d00781cc9bf"],"next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"[block:embed]\n{\n \"html\": \"<iframe class=\\\"embedly-embed\\\" src=\\\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FjiM6pYVDFlI%3Ffeature%3Doembed&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DjiM6pYVDFlI&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FjiM6pYVDFlI%2Fhqdefault.jpg&key=f2aa6fc3595946d0afc3d76cbbd25dc3&type=text%2Fhtml&schema=youtube\\\" width=\\\"854\\\" height=\\\"480\\\" scrolling=\\\"no\\\" frameborder=\\\"0\\\" allow=\\\"autoplay; fullscreen\\\" allowfullscreen=\\\"true\\\"></iframe>\",\n \"url\": \"https://www.youtube.com/watch?v=jiM6pYVDFlI\",\n \"title\": \"Data Loader Tutorial\",\n \"favicon\": \"https://www.google.com/favicon.ico\",\n \"image\": \"https://i.ytimg.com/vi/jiM6pYVDFlI/hqdefault.jpg\"\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Need help?\",\n \"body\": \"Our data loader is designed to use without the need for a developer. It's easy to set up and get going. \\n\\nHowever, if you're looking for extra help, our Pro and Enterprise plans include a customized onboarding to help you reach your goals. For more info contact us at [email protected].\"\n}\n[/block]\n#Features and Benefits \n####Data Integrity\nMaintain lossless data from your database. Relying on frontend or clientside tracking can often lose data due to various factors such as blockers or incorrect coding. A direct connection to your database maintains a 1 to 1 ratio of your event data. \n\n####Historical Data\nEvent-based client and serverside tracking records data in real-time. However, there's no way to access historical data unless it was recorded in Woopra. When connecting to your database, we can pull any historical data and retroactively import past data and user information for immediate consumption and analysis.\n\n####No Developer Required\nOften with traditional event tracking, you need a developer to code custom events on your site. With the Data Loader, all you need is the database credentials to start importing data. Setup is easy, and you can simply select what data you want to bring in -- no coding required.\n\n#What you'll need\n * **Database Credentials**: Required to access your database.\n * **Unique Identifiers**: Required so we can tie activity and visitor data to the correct user's profile.\n * **Action Data**: What actions are the user doing, and optionally what metadata is associated with these actions? (e.g., view page x, make a payment, use feature X). \n * **Date/Timestamps**: Required — we must know when the user did that particular action.\n\n#Connect Your Database\n##Whitelist IPs\nIf your data source is behind a private subnet, you might need to whitelist our server IPs so we can access the data. Here is the list of IP addresses you'll need to whitelist. You will need to whitelist all of the following IPs. This applies to any database or self-hosted database that may be behind a firewall such as SQL databases (e.g. BigQuery, Redshift, Snowflake, etc.). \n[block:parameters]\n{\n \"data\": {\n \"0-0\": \"116.202.114.34\\n116.202.112.173\\n116.202.113.173\\n116.202.113.228\\n116.202.114.101\\n116.202.114.102\\n116.202.114.105\\n195.201.247.43\\n136.243.171.42\\n136.243.172.140\",\n \"h-0\": \"Whitelist IPs\"\n },\n \"cols\": 1,\n \"rows\": 1\n}\n[/block]\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/3a6d771-Image_2019-11-11_at_2.09.02_PM.png\",\n \"Image 2019-11-11 at 2.09.02 PM.png\",\n 2982,\n 1106,\n \"#e3eaf8\"\n ],\n \"caption\": \"Under the Connections section is where you'll add all your databases.\"\n }\n ]\n}\n[/block]\n1. Navigate to the Configure tab at the top, then click Connections on the left side in the Data Loader section.\n2. Click Create Connection in the upper right.\n3. Select your integration from the dropdown and enter your credentials.\n4. Save the connection.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/5b18b24-Image_2019-11-11_at_2.47.26_PM.png\",\n \"Image 2019-11-11 at 2.47.26 PM.png\",\n 2446,\n 910,\n \"#f9fafb\"\n ]\n }\n ]\n}\n[/block]\n#Schedule Your Tasks\nConfigure what data to bring in from your data source and when to check for updated/new data. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/a01c041-Image_2019-11-11_at_4.55.11_PM.png\",\n \"Image 2019-11-11 at 4.55.11 PM.png\",\n 2996,\n 1040,\n \"#e1e9f8\"\n ]\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"danger\",\n \"title\": \"Check and recheck your tasks before making them active!\",\n \"body\": \"When you bring in new data and events, this can cause profiles to [merge](doc:unique-identifiers-and-profile-merging). While it's possible to delete events, we cannot un-merge profiles. Make sure you have set up the tasks correctly. If you are unsure, contact [email protected] with any questions.\"\n}\n[/block]\n1. Navigate to the Configure tab at the top, then click Tasks on the left side in the Data Loader section.\n2. Click Create Task in the upper right.\n3. Name and configure the task (see below).\n\n[Unique Identifiers and Profile Merging](doc:unique-identifiers-and-profile-merging) \n\n##Source Configurations\n###Table\n\nSelect the table you want to use for importing your data. Simply select the source and navigate to the table you want to select.\n\n###Optional Table Joins\nIt's also possible to import data from multiple tables by configuring the relations or joins for the tables you'll be using. Joining tables allows you to pull in data from multiple tables and tells Woopra how the tables relate to each other. \n\n1. Select the data source you'll be using. \n2. Select the table you want to use. \n3. If you'll are using multiple tables, you can define how the tables relate by selecting a common field that's shared by both tables. This is called a primary key - foreign key relationship. For example, if you wanted to use an accounts table and a payment table, both of these tables may share an account ID or perhaps a User ID. See our example below:\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/e630a91-Image_2019-11-11_at_2.58.00_PM.png\",\n \"Image 2019-11-11 at 2.58.00 PM.png\",\n 2228,\n 290,\n \"#f7f8fa\"\n ],\n \"caption\": \"Here you can see we are joining the accounts table and the paypal table. We are selecting the common filed, which is the id from the accounts table and the account_id from the paypal table.\"\n }\n ]\n}\n[/block]\n#Data Types\nImport your data as Visitor Properties or Actions. \n\n###Identify\n[Visitor Properties](doc:types-of-tracked-data#section-visitor-data) are things like company names, emails, first and last names, locations, or any other identifying information. \n\n###Track\n[Action data](doc:types-of-tracked-data#section-action-data) is anything the user does that contains a timestamp. These can be things like payments, signups, subscription updates, or really any action a user can do in your application. \n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Track events can also update Visitor Properties.\",\n \"body\": \"For example say you have an 'Update Profile' event where a user can update their contact info. This could be an event, but can also update the Visitor Properties at the same time.\"\n}\n[/block]\nSelect **Identify** to import Visitor Properties and select **Track** to import Action data.\n\n#Sync Interval\nSelect the interval for which to check for changes. You can set this as low as 1 minute. \n\nLet's look at the following example. Say you set the task for 10 min intervals. Next, you run a task, and the import takes 1 hour. The interval waits 10 min after the initial task is complete to check for new entries. If there is new data during the next check, we'll import the new data, and once that's done, it will wait 10 min before checking again. The Sync Interval is the delay between running the task.\n[block:callout]\n{\n \"type\": \"warning\",\n \"title\": \"Tasks run queries on your database.\",\n \"body\": \"Each time we check for new data according to your selected Sync Interval settings, depending on your database, this could count toward your querying counts and limits. There are no querying limits in Woopra, but be sure to check with your database admins to understand *your* database limits or querying costs.\"\n}\n[/block]\n#Conditions\nIf you have only certain data you want to bring in from these tables, you can use conditions to filter out the results. For example, say you were importing payment information, but you only wanted to import payments from the United States. If you have country data with the payments, you could select the 'country' column from your table and only import payments from the USA. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/41ae90b-Image_2019-11-11_at_3.24.23_PM.png\",\n \"Image 2019-11-11 at 3.24.23 PM.png\",\n 1590,\n 206,\n \"#f8f9fa\"\n ]\n }\n ]\n}\n[/block]\n#Mappings\nConfigure how to map your user properties and actions. After defining what tables and data you want to import, you now need to tell Woopra what to do with that data. \n\nDepending on if you selected to import the data as Identify (visitor data) or Track (action/event data), the mapping configuration will change accordingly.\n\n#Identify: Select & Map User ID and User Properties\n##Unique IDs\nThis is the primary identifier to sync the data to the correct profiles. Typically this will either be a user ID or an email. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/df14167-Image_2019-11-11_at_3.52.52_PM.png\",\n \"Image 2019-11-11 at 3.52.52 PM.png\",\n 1506,\n 216,\n \"#f6f7f9\"\n ]\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"warning\",\n \"title\": \"Custom IDs\",\n \"body\": \"Please contact [email protected] if you are trying to add/use a custom ID.\"\n}\n[/block]\n##Properties\nMap the columns/fields to sync with your Visitor Properties. \n\nFor example, say you have a table in your database that has the person's name, address, country, organization, etc. You can sync these fields to Visitor fields in Woopra profiles. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/74ed268-Image_2019-11-11_at_3.58.05_PM.png\",\n \"Image 2019-11-11 at 3.58.05 PM.png\",\n 1728,\n 196,\n \"#f7f8f9\"\n ],\n \"caption\": \"Here we're mapping the org_name from our database to the org_name Visitor Property in user's profiles.\"\n }\n ]\n}\n[/block]\n##Cursor\nYou can think of the Cursor as a bookmark for your data that’s placed when a task completes. Once the task starts again after the set Sync Interval, it will use the Cursor as a starting point to retrieve new data. \n\nTypically the Cursor will be a unique incrementally generated ID, a timestamp or modified date, or any unique and sequential column. Randomly generated IDs will not work. \n\n#Track: Map User Actions\n\n##Select & Map User ID\nThis is the main identifier to sync the data to the correct profiles. Typically this will either be a user ID or an email. \n##Action Name\nChoose a name for the action you are importing. For example, make_payment, update_subscription, new_registration, update_profile, etc. \n\n##Action Properties\nEach action can have its own set of properties. For example, if you have a payment event, this may have properties such as amount, plan type, start date, upgrade, etc. \n\nTo map these fields, you'll select the column from your tables, and map those to event properties in Woopra. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/8f6858a-Image_2019-11-11_at_5.00.45_PM.png\",\n \"Image 2019-11-11 at 5.00.45 PM.png\",\n 1788,\n 542,\n \"#f7f8f9\"\n ],\n \"caption\": \"Here we created the 'signup' event with the properties: plan_id, org_name, and plan_type.\"\n }\n ]\n}\n[/block]\n##Timestamp\nSelect the column that contains the timestamp of the event. Each event must have a timestamp associated with it.\n\n##Cursor\nYou can think of the Cursor as a bookmark for your data that’s placed when a task completes. Once the task starts again after the set Sync Interval, it will use the Cursor as a starting point to retrieve new data. \n\nTypically the Cursor will be a unique incrementally generated ID, a timestamp or modified date, or any unique and sequential column. Randomly generated IDs will not work.","excerpt":"Data Loader allows you to import current and historical data from external data sources for instant availability to run analytics on your data.","slug":"data-loader-overview","type":"basic","metadata":{"description":"","title":"","image":[]},"title":"Data Loader Overview","__v":1,"parentDoc":null,"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2020-12-02T15:03:16.177Z","children":[],"childrenPages":[]},{"_id":"5dd5dd1b117846003a5aab40","version":"5b070ce4060bee00035d8d12","updatedAt":"2019-12-10T20:43:51.405Z","createdAt":"2019-11-21T00:40:59.163Z","project":"58b721a1f22b830f009a0bcd","user":"5adfa297452bd900036d0f67","category":"5dc9c13d6d53e600565383ce","updates":[],"next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":1,"body":"* Redshift\n* Cassandra\n* Snowflake\n* HubSpot\n* Marketo\n* PostgreSQL\n* Magento\n* Customer.io\n* Zendesk\n* Intercom\n* Azure\n* BigQuery\n* MySQL\n* Salesforce\n* Stripe \n\nMore to come!","excerpt":"","slug":"current-list-of-integrations","type":"basic","metadata":{"description":"","title":"","image":[]},"title":"Current List of Integrations","__v":0,"parentDoc":null,"children":[],"childrenPages":[]},{"_id":"5e13ab78714b76004a41370b","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","user":"5adfa297452bd900036d0f67","category":"5dc9c13d6d53e600565383ce","updates":[],"updatedAt":"2020-02-11T22:37:56.817Z","createdAt":"2020-01-06T18:35:56.498Z","next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":2,"body":"[block:callout]\n{\n \"type\": \"warning\",\n \"title\": \"Document in progress\",\n \"body\": \"This is an ongoing list and will be updated regularly. If you are unclear what cursor to use, please contact [email protected] and we can try and help determine what cursor you should use.\"\n}\n[/block]\n#Cursor\nYou can think of the Cursor as a bookmark for your data that’s placed when a task completes. Once the task starts again after the set Sync Interval, it will use the Cursor as a starting point to retrieve new data. \n\nTypically the Cursor will be a unique incrementally generated ID, a timestamp or modified date, or any unique and sequential column. Randomly generated IDs will not work. \n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"Integration\",\n \"h-1\": \"Table\",\n \"h-2\": \"Suggested Cursor\",\n \"0-0\": \"SQL Database\",\n \"0-1\": \"All Tables\",\n \"0-2\": \"This will depend on your database since each SQL database will be different. We suggest using a date_modified, timestamp, or a unique *incrementally* generated id. Randomly generated id's will not work.\",\n \"1-0\": \"Salesforce\",\n \"1-1\": \"All Tables\",\n \"1-2\": \"SystemModstamp - All standard Salesforce tables should have a SystemModstamp column. This is updated whenever there is a change to that record. Can also use CreatedDate depending on the task. Tip: create multiple tasks for created and updated at events.\",\n \"2-0\": \"Hubspot\",\n \"2-1\": \"Contact\",\n \"2-2\": \"addedat or updatedat - Depends on the task event. Tip: Create 2 events, 'create contact' and 'update contact' using the above suggested cursors respectively.\"\n },\n \"cols\": 3,\n \"rows\": 11\n}\n[/block]","excerpt":"Here we have laid out the suggested cursors to use in your tasks broken down by integration. Some integrations have different tables in them and those tables may use different cursors.","slug":"suggested-cursor-list","type":"basic","metadata":{"description":"","title":"","image":[]},"title":"Suggested Cursor List","__v":0,"parentDoc":null,"children":[],"childrenPages":[]},{"_id":"5f1a12168e22a1006e04a5cd","metadata":{"image":[],"title":"","description":""},"api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"next":{"description":"","pages":[]},"title":"CSV Loader","updates":[],"type":"basic","slug":"csv-loader","excerpt":"Use your CSV files to import data directly to Woopra","body":"[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/eea9955-woopra-csv-loader.svg\",\n \"woopra-csv-loader.svg\",\n 700,\n 422,\n \"#ffffff\"\n ]\n }\n ]\n}\n[/block]\n#Requirements\n### Identify Imports\n* Unique Identifier such as an Email.\n### Track Imports\n* Event data with timestamps. Each row should have a timestamp associated with the data. The data can contain events or contacts, as long as it has a date such as a created_at timestamp. \n* Unique Identifier such as an Email.\n\n\n\n#Steps to Import\nThe import is a two-step process. You'll need to upload the CSV and then create the task.\n\n##Upload CSV File\n1. Navigate to the Configure tab at the top then click on CSV Loader on the left side.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/482d3ec-Image_2020-07-23_at_2.33.19_PM.png\",\n \"Image 2020-07-23 at 2.33.19 PM.png\",\n 2870,\n 1318,\n \"#272a30\"\n ]\n }\n ]\n}\n[/block]\n2. Click to upload or drag and drop your CSV file. \n3. Select the configuration options. You can select between a comma, tab, or a custom delimiter. You will also want to indicate whether the first line contains title information.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/cec9347-Image_2020-07-23_at_2.49.50_PM.png\",\n \"Image 2020-07-23 at 2.49.50 PM.png\",\n 2334,\n 1206,\n \"#222829\"\n ]\n }\n ]\n}\n[/block]\n4. Save the connection.\n\n##Create Task\n1. Once the upload is complete, navigate to the Tasks section on the left side under the Data Loader.\n2. Select CSV as the source, and then select the CSV you have uploaded.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/6f62ba3-Image_2020-07-23_at_3.31.53_PM.png\",\n \"Image 2020-07-23 at 3.31.53 PM.png\",\n 2852,\n 1308,\n \"#232429\"\n ]\n }\n ]\n}\n[/block]\n3. Select whether the data imported is an identify or track event. Check out the [source configurations](https://docs.woopra.com/docs/data-loader-overview#source-configurations) for more details.\n4. Select the mapping which will typically be 'email' to the 'email' in Woopra. This tells Woopra how to link the data to the correct profiles.\n5. Add in the visitor properties or event properties that are associated with the event. If you are importing a track event, you will also need to name the event. For example, if you are importing a payment event, you'll want to label this event something such as 'make payment' and add the payment properties with the event such as the amount, payment method, etc. \n6. Select the timestamp column in your CSV.\n7. Save, preview, and activate. If the data looks good in the preview, you're ready to activate the task and the import will start.","order":4,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"pendingAlgoliaPublish":false,"previousSlug":"csv-uploader","slugUpdatedAt":"2020-07-28T19:11:48.647Z","createdAt":"2020-07-23T22:41:26.409Z","updatedAt":"2020-07-28T19:50:03.005Z","user":"5adfa297452bd900036d0f67","category":"5dc9c13d6d53e600565383ce","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","__v":0,"parentDoc":null,"children":[],"childrenPages":[]}]},{"_id":"5b17221e221bfb00033eafc2","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","isAPI":false,"reference":false,"createdAt":"2018-06-05T23:51:58.286Z","from_sync":false,"order":10,"slug":"schemas","title":"Schema","__v":0,"pages":[{"_id":"5b1727083b44af000307634f","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b17221e221bfb00033eafc2","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-06T00:12:56.113Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"Schemas are the skeleton of the Woopra project. Schemas are declarations of metadata about an event or visitor property. They define how the data tracked is read and processed by Woopra. The Schema configuration for all action and visitor data tells Woopra what type of data it is, how the user wants it to be displayed, and how it can be aggregated. \n[block:callout]\n{\n \"type\": \"warning\",\n \"title\": \"Editing a Schema will NOT affect the actual tracking.\",\n \"body\": \"Editing Schemas will only change how Woopra reads and understands the data that's being sent as well as how the data is displayed. Editing Schemas will not affect the data that is sent.\"\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"danger\",\n \"title\": \"DO NOT change the KEY value\",\n \"body\": \"Editing schemas will not affect the tracking, however, if you are not the developer who implemented the code on your site, we recommend you do not change the **Key** value. \\n\\nPlease use caution if changing the **Key** value if you do not understand what this is. Changing this value can result in duplicate events in your Schemas.\"\n}\n[/block]\nThe type and aggregation set for each property will be leveraged for smart filtering and richer analytics throughout Woopra. Basic Schemas are automatically created from any custom action and visitor properties being tracked, or Integrations Apps’ actions that are selected from the configuration. Once added, they should be configured as desired by the user who set up the tracking code.\n\nTo access the Schema editor, you must be an Administrator. Click on the “Configure” button in the navigation bar and find Action and Visitor Schemas under the Manage section of the sidebar.\n\nThere are two types of Schema:\n\n* *Visitor Schema*\n* *Action Schema*\n\n\n*Schemas can be found in the Configure section of the Woopra Dashboard.*\n[block:api-header]\n{\n \"title\": \"Visitor Schema\"\n}\n[/block]\nVisitor Schema define the custom visitor properties that are being tracked. The name, email, and company name are added to the Visitor Data Schema by default, but Woopra will also add Schema for the other custom visitor data (https://docs.woopra.com/docs/custom-actions-and-visitor-data) that the script is calling. To learn more about how to identify your visitors and track [custom visitor data](https://docs.woopra.com/docs/custom-actions-and-visitor-data), please read the [Javascript tracking tutorial](https://dash.readme.io/project/woopra/refs/intro-javscript-sdk).\n\nFor each Schema, define the title, description, key, type, and aggregation:\n\n*Please note, Schemas are character sensitive. We accept upper/lower case letters, numbers, underscore, dashes, as well as spaces.*\n\n\n[block:parameters]\n{\n \"data\": {\n \"h-1\": \"Description\",\n \"h-2\": \"Description\",\n \"0-0\": \"Title\",\n \"h-0\": \"Schema Property\",\n \"1-0\": \"Description\",\n \"2-0\": \"Key\",\n \"3-0\": \"Type\",\n \"4-0\": \"Aggregation\",\n \"0-1\": \"The Visitor Property title as seen throughout Woopra. This helps users understand the property being tracked, even if they did not participate in the setup. e.g. User ID.\",\n \"1-1\": \"The description is an important reference for the entire team to understand the meaning of the visitor property, especially those who did not participate in the tracking code setup. It’s always a good practice to add a description to fields to make it easy for other users to take action on this data.\",\n \"2-1\": \"The key name as tracked on the website. This comes directly from the tracking code. e.g. company size.\",\n \"3-1\": \"Type of property: \\n * **Text** – For any string value.\\n * **Number** – For numbers/decimals.\\n * **Timestamp** – For dates. *Note that these should be sent in milliseconds rather than seconds.* \",\n \"4-1\": \"Specify whether the property is a unique value (A property wished to be tracked, but do not wish to visualize graphically e.g. account_id), amount (e.g. monetary value), or group (value that could be shared with other customers and that is wanted to be seen in a report e.g. trial, package, etc.).\"\n },\n \"cols\": 2,\n \"rows\": 5\n}\n[/block]\n\n[block:api-header]\n{\n \"title\": \"Action Schema\"\n}\n[/block]\nThe Action Schema is different from the Visitor Schema. It defines the actions from the installed Integrations Apps or the actions that were set up for tracking and any properties associated with those actions. Each company has their own key events that need to be tracked.\n\nFor an e-commerce website, they may want to track product views, cart updates, and purchases, while a SaaS business may want to track form submissions, signups, trial engagement, conversions, etc. To learn more about how to [track custom actions](https://docs.woopra.com/docs/custom-actions-and-visitor-data), please read the [Javascript tracking tutorial] (https://dash.readme.io/project/woopra/refs/intro-javscript-sdk).\n\nThe Action Schema configuration will fine tune the look and feel of Woopra for the company. Woopra will use the Schema to build the content of the customer [Profiles](https://docs.woopra.com/docs/profiles) (For example, instead of “Visitor did action payment”, it would say “*Jim* purchased the *Yearly Small Business package* for *$1,999.50*“) and more.\n[block:api-header]\n{\n \"title\": \"Action Info\"\n}\n[/block]\nEach action consists of four parts to be configured:\n[block:parameters]\n{\n \"data\": {\n \"0-0\": \"Title\",\n \"1-0\": \"Description\",\n \"2-0\": \"Key\",\n \"0-1\": \"The action name as seen throughout Woopra. This helps users understand the action being tracked, even if they did not participate in the setup. Administrators can associate an icon with the action that is being tracked.\",\n \"1-1\": \"The description is an important reference for the entire team to understand the meaning of this action, especially those who did not participate in the tracking code setup. It’s always a good practice to add a description to fields to make it easy for other agents to act on this data.\",\n \"2-1\": \"The name of the action as it’s tracked e.g payment. We recommend you not change this value unless you understand how the events are being sent. If you're unsure, only change the Title value.\",\n \"3-0\": \"Action Types Active/Passive\",\n \"3-1\": \"In [Users Profiles](https://docs.woopra.com/docs/profiles#histogram-activepassive), you can choose to show Active and/or Passive actions only.\\n\\nActive: This action is sent as a result of direct user action.\\n\\nPassive: This action is sent as part of a background process or tracked on a user's behalf.\"\n },\n \"cols\": 2,\n \"rows\": 4\n}\n[/block]\n\n[block:api-header]\n{\n \"title\": \"Action Properties\"\n}\n[/block]\nEach property will have the below fields:\n[block:parameters]\n{\n \"data\": {\n \"0-0\": \"Key\",\n \"1-0\": \"Type\",\n \"2-0\": \"Aggregation\",\n \"0-1\": \"The name of the property as it’s tracked e.g. amount.\",\n \"1-1\": \"Types of the properties:\\n\\n* **Text** – For any string value.\\n* **Number** – For numbers/decimals.\\n* **Boolean** – For two possible values. Accepted input is True or False. It is an alias for Short Boolean.\\n* **Short Boolean** – For two possible values. Acceptable input is 0 for False, 1 for True.\\n* **Timestamp** – For dates. Note that these should be sent in milliseconds rather than seconds.\\n\\n*Number and Timestamp types support formats. Text type does not.*\",\n \"2-1\": \"Specify whether the property is a unique value, amount, or group.\"\n },\n \"cols\": 2,\n \"rows\": 3\n}\n[/block]\n\n[block:api-header]\n{\n \"title\": \"Aggregations\"\n}\n[/block]\n\n[block:parameters]\n{\n \"data\": {\n \"0-0\": \"Group\",\n \"1-0\": \"Unique\",\n \"0-1\": \"Used for properties that can be applied to multiple events or visitors, such as company, product, or credit card type.\",\n \"1-1\": \"Used for properties that are a unique identifier for a specific event, such as a receipt ID or a transaction ID. For visitors, a username or email address would be a unique identifier, while company would be a “group” as it can be applied to more than one visitor.\",\n \"2-0\": \"Amount\",\n \"2-1\": \"Used for properties that can be added up or summed. When you designate a property as “amount”, you will be able to sum it in your segmentation filters (https://docs.woopra.com/docs/segmentation-filters) and analytics reports.\\nFor example, in the “payment” Action Schema, we can designate the “amount” property as an “amount”. Now when we are using segmentation filters, we may segment for “all customers who have made payments that totaled more than $200”. Similarly, our action report for the “payment” event will include a column which sums the total payment amounts by day, week, or month.\"\n },\n \"cols\": 2,\n \"rows\": 3\n}\n[/block]\n\n[block:api-header]\n{\n \"title\": \"Schema Auto-Generation\"\n}\n[/block]\nWhen a new event without a schema comes into Woopra, the system will create a basic schema so that the event can be found in reports and searched for in the Woopra interface. Users can then edit this schema in the schemas section to give some items a more sensical value that the computer cannot auto-generate such as Display Name, and Template.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/64da1ae-9a21b9b33e5fdbd6062682e6b4eef4fb_Image_2019-04-24_at_3.20.54_PM.png\",\n \"[9a21b9b33e5fdbd6062682e6b4eef4fb]_Image 2019-04-24 at 3.20.54 PM.png\",\n 1312,\n 1250,\n \"#e5e7f6\"\n ],\n \"caption\": \"New events sent to Woopra will be indicated by the pink notifications. These are meant to remind you to review the new events to make sure the data types and templates are set up how you'd like.\"\n }\n ]\n}\n[/block]\nIf the action is already added to the schema, Woopra will not modify it if you start sending other properties. In other words, the new properties will not be automatically added to the existing Schema. To update the schema you will need to either delete it and wait for the action to be tracked again, or manually make the property modifications yourself. Note that deleting a Schema will not delete any existing data that has been collected.\n[block:callout]\n{\n \"type\": \"warning\",\n \"title\": \"Auto-Generated Characters\",\n \"body\": \"For Schemas to be auto-generated, the allowed characters are -- lower case letters, numbers, underscore, dashes, and spaces.\"\n}\n[/block]\n## Event Templates (found in both Action and Visitor Schemas)\n\nThe template is how the event is displayed when it occurs in a timeline or actions history. It allows the user to use event properties in a sentence about that event when it occurs. For instance, the email_open event may have a title, `\"Email Opened\"`, and a template of `\"Opened email with subject: ${actions.subject}\"`. \n\nSee Woopra [Templates](https://docs.woopra.com/docs/woopra-templates) for more on how to create your own templates. \n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/2303cf8-31259427b27097077854b08ce1a359c6_Image_2019-04-24_at_2.52.11_PM.png\",\n \"[31259427b27097077854b08ce1a359c6]_Image 2019-04-24 at 2.52.11 PM.png\",\n 2392,\n 1898,\n \"#bfbfc1\"\n ],\n \"caption\": \"Edit the Schema template to change how the event looks in the People Profiles.\"\n }\n ]\n}\n[/block]\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/b0fe825-804e84e175d0e2b48b75c745ee1d4562_Image_2019-04-24_at_2.50.04_PM.png\",\n \"[804e84e175d0e2b48b75c745ee1d4562]_Image 2019-04-24 at 2.50.04 PM.png\",\n 1440,\n 1544,\n \"#b7b8ba\"\n ],\n \"caption\": \"How the events will look in the People Profiles.\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"warning\",\n \"title\": \"*Schema Limits*\",\n \"body\": \"The Woopra system puts limits on how many event and visitor properties can have schemas declared. Those limits are currently at 200 visitor property schemas, and 200 event schemas.\\n\\nFor the javascript formatting for your schema, you can reference here.\"\n}\n[/block]","excerpt":"","slug":"configuring-your-schema","type":"basic","title":"Schema","__v":0,"parentDoc":null,"updatedAt":"2020-11-25T22:04:50.836Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2020-07-29T20:45:10.863Z","children":[],"childrenPages":[]},{"_id":"5d5b2518cb2b4f0050070979","version":"5b070ce4060bee00035d8d12","updatedAt":"2019-08-22T23:42:48.287Z","createdAt":"2019-08-19T22:39:20.315Z","project":"58b721a1f22b830f009a0bcd","category":"5b17221e221bfb00033eafc2","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":1,"body":"#How to Create a Custom Property\n1. To create a custom property, you will first navigate to the [action achema](https://docs.woopra.com/docs/configuring-your-schema#section-action-schema) section under the configure tab and select the action you wish to add the property to.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/e455a6e-Image_2019-08-19_at_3.43.51_PM.png\",\n \"Image 2019-08-19 at 3.43.51 PM.png\",\n 2850,\n 1424,\n \"#eaeef9\"\n ]\n }\n ]\n}\n[/block]\n2. Next, you will click on the Add Property button. Here you can name your property and set a unique key for the property.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/3be799f-Image_2019-08-19_at_3.48.58_PM.png\",\n \"Image 2019-08-19 at 3.48.58 PM.png\",\n 2366,\n 1168,\n \"#fafafb\"\n ],\n \"caption\": \"In this example, I want to group similar sounding music genres together in a new property.\"\n }\n ]\n}\n[/block]\n3. Enter the formula for your new property. For a list of available formulas, please see our [Formula](https://docs.woopra.com/docs/operations) page for more info. \n\n##Grouping Similar Entries Example\nSay I want to create a new property in a tracked action (e.g. Played Song) using a formula that will group similar music genres together.\n\nFor example, in my event called 'Played Song' with a property 'genres', I want to change the data from the original column to the converted column.\n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"Genres Original\",\n \"0-0\": \"pop\",\n \"1-0\": \"POP\",\n \"2-0\": \"roc\",\n \"3-0\": \"rock\",\n \"4-0\": \"hip hop\",\n \"5-0\": \"hip-hop\",\n \"6-0\": \"hiphop\",\n \"h-1\": \"Genres Converted\",\n \"0-1\": \"Pop\",\n \"1-1\": \"Pop\",\n \"2-1\": \"Rock\",\n \"3-1\": \"Rock\",\n \"4-1\": \"Hip-Hop\",\n \"5-1\": \"Hip-Hop\",\n \"6-1\": \"Hip-Hop\"\n },\n \"cols\": 2,\n \"rows\": 7\n}\n[/block]\nThe converted column will change the names which makes it much easier to run reports on the data.\n\n1. First, I'll click the \"Add Property\" button under the 'Played Song' event while viewing that action in the [Action Schema](doc:custom-schema-properties). \n\n2. Next, I'll select the formula box and start selecting and entering the formula. For this example, I can use IF_THEN_ELSE and select the condition, true result, and false result. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/109688d-Image_2019-08-21_at_12.40.36_PM.png\",\n \"Image 2019-08-21 at 12.40.36 PM.png\",\n 2396,\n 1078,\n \"#fefdfe\"\n ],\n \"sizing\": \"full\"\n }\n ]\n}\n[/block]\n3. Lastly, hit the save button in the upper right and you can now use this new property in your reports.\n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"NOTE\",\n \"body\": \"Formulas will only work on properties within each action. You cannot create a formula that has parameters from another action or action property. In other words, if I have a 'Played Song' event, I could not make a new formula property under 'Played Song' that uses another property from another event (e.g. 'Played Video').\"\n}\n[/block]\nYou can see when we add the two columns in the Compare by, all the names have been changed for the genres that we edited. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/d1e0a51-Image_2019-08-21_at_12.46.40_PM.png\",\n \"Image 2019-08-21 at 12.46.40 PM.png\",\n 2524,\n 2398,\n \"#f8f8fa\"\n ],\n \"caption\": \"A comparison with the old Genres property and the new formula property.\"\n }\n ]\n}\n[/block]\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/0973815-Image_2019-08-22_at_3.16.39_PM.png\",\n \"Image 2019-08-22 at 3.16.39 PM.png\",\n 2528,\n 2106,\n \"#f8f6f8\"\n ],\n \"caption\": \"Now I can use the new property for my analysis.\"\n }\n ]\n}\n[/block]","excerpt":"With custom schema properties, you can use formulas to create your own filtered properties that you can use in reports. This can be useful if you have similar entries that you wish you group together in your reports. For example, if you had campaign sources like face book, FACEBOOK, FaceBook, etc. and you wanted them all to be 'Facebook' -- you could use this feature to achieve this.","slug":"custom-schema-properties","type":"basic","title":"Custom Action Schema Properties","__v":0,"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"5d65acfd1d92d5004212f7e6","version":"5b070ce4060bee00035d8d12","updatedAt":"2021-02-05T23:28:40.558Z","createdAt":"2019-08-27T22:21:49.156Z","project":"58b721a1f22b830f009a0bcd","user":"5adfa297452bd900036d0f67","category":"5b17221e221bfb00033eafc2","updates":[],"next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":2,"body":"#How to Create a Custom Property\n1. To create a custom property, you will first navigate to the [Visitor Schema](https://docs.woopra.com/docs/configuring-your-schema#section-visitor-schema) section under the configure tab and select to add a new Visitor Property.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/f4e861c-Screen_Recording_2019-08-27_at_12.24_PM.gif\",\n \"Screen Recording 2019-08-27 at 12.24 PM.gif\",\n 1498,\n 1122,\n \"#ecf0f9\"\n ]\n }\n ]\n}\n[/block]\n2. Enter the formula for your new property. For a list of available formulas, please see our [Formula](https://docs.woopra.com/docs/operations) page for more info. \n\n##Combining first name and last name into a new property example\nSay I want to create a new property Name that combines two other properties First Name and Last Name. \n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Note\",\n \"body\": \"The Visitor Property 'Name' is baked into the Woopra UI. Woopra's People Profiles displays the 'Name' property on the top of the profiles so it's best to send the full name to this property.\"\n}\n[/block]\n###To create the property you can follow these steps:\n\n1. First, I'll click to add a new Visitor Property.\n\n2. Next, I'll select the formula box and start selecting and entering the formula. For this example, I can use CAT and use the First Name field, then a space, then the Last Name field.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/caedcdf-Image_2019-08-27_at_3.59.36_PM.png\",\n \"Image 2019-08-27 at 3.59.36 PM.png\",\n 2524,\n 1240,\n \"#f7f3f9\"\n ],\n \"sizing\": \"full\"\n }\n ]\n}\n[/block]\n3. Lastly, hit the save button in the upper right and you can now use this new property in your reports.\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/7340ddb-Image_2019-08-27_at_4.03.49_PM.png\",\n \"Image 2019-08-27 at 4.03.49 PM.png\",\n 2380,\n 1148,\n \"#f3eef4\"\n ],\n \"caption\": \"Now we can see the New Name dimension that's joining the first and last name fields.\"\n }\n ]\n}\n[/block]","excerpt":"With custom schema properties, you can use formulas to create your own filtered properties that you can use in reports. This can be useful if you wanted to combine visitor properties such as First and Last Name and create a new property that contains the full name.","slug":"custom-visitor-schema-properties","type":"basic","title":"Visitor Schema - Formulas","__v":0,"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-02-05T22:33:15.303Z","children":[],"childrenPages":[]},{"_id":"601dd82f08fd8a00726fb2cd","metadata":{"image":[],"title":"","description":""},"api":{"method":"get","url":"","auth":"required","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"params":[]},"next":{"description":"","pages":[]},"title":"Visitor Schema - Profile Metrics","updates":[],"type":"basic","slug":"visitor-schema-profile-metrics","excerpt":"Visitor Schema Profile Metrics","body":"#Overview\n\nCustom Profile Metrics allows you to create custom Visitor Schemas based on aggregate operations of custom events. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/b1514b1-Image_2021-02-05_at_3.26.05_PM.jpg\",\n \"Image 2021-02-05 at 3.26.05 PM.jpg\",\n 2058,\n 1296,\n \"#f2f5f8\"\n ],\n \"caption\": \"To start a new People Report, click on “People” then “New Report.”\"\n }\n ]\n}\n[/block]\n##Instructions \n\nTo create custom Profile Metrics, you can navigate to the Visitor Schema and click \"+ New Visitor Schema\" at the top right.\n\nThen you can name the new property and select the property type. See the [table below](https://docs.woopra.com/docs/visitor-schema-profile-metrics#list-of-operations) for details on each operation. \n\nDepending on the Action you select and the Action Property, you can then select the data type and format to be used. See the below example:\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/242bb6c-Image_2021-02-05_at_3.39.38_PM.jpg\",\n \"Image 2021-02-05 at 3.39.38 PM.jpg\",\n 2024,\n 1324,\n \"#f5f1f9\"\n ],\n \"caption\": \"Here we want to see a Visitor Property that shows the total amount a user has spent in the past 30 days.\"\n }\n ]\n}\n[/block]\nAfter you're done with the configuration you can click \"Create\" to save the new Visitor Property\n\n##List of Operations\n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"Operation\",\n \"h-1\": \"Use\",\n \"0-0\": \"Count\",\n \"1-0\": \"Sum\",\n \"2-0\": \"Count Unique\",\n \"3-0\": \"Last Touch\",\n \"4-0\": \"Top\",\n \"5-0\": \"Mean\",\n \"6-0\": \"Min\",\n \"7-0\": \"Max\",\n \"0-1\": \"Counts the total number of times the selected action occurs.\",\n \"1-1\": \"Sums the total of an action property that is a number.\",\n \"h-2\": \"Example\",\n \"0-2\": \"Count the total number of songs a user played on your site.\",\n \"1-2\": \"Sum the total revenue from a payment made events.\",\n \"2-1\": \"Count the unique number of times a selected action occurs.\",\n \"2-2\": \"Count the unique songs a user played on your site.\",\n \"3-1\": \"Displays the last action property of a specific action.\",\n \"3-2\": \"Show the last article a user viewed on your site.\",\n \"4-1\": \"Displays the top occurrence of a specific action.\",\n \"4-2\": \"Show what feature the user was using the most.\",\n \"5-1\": \"Displays the average out of a set of numbers.\",\n \"5-2\": \"Show the average payment amount a user spends out of their purchase history.\",\n \"6-1\": \"Displays the smallest value of a set of numbers.\",\n \"6-2\": \"Show the smallest order amount the user spent.\",\n \"7-1\": \"Displays the highest value of a set of numbers.\",\n \"7-2\": \"Show the highest amount a user has loaded into their account.\",\n \"8-0\": \"First Touch\",\n \"8-1\": \"Displays the first action property of a specific action within a specified timeframe.\",\n \"8-2\": \"Show the first product a user purchased in the past 2 years.\"\n },\n \"cols\": 3,\n \"rows\": 9\n}\n[/block]","order":3,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-02-05T22:33:15.514Z","createdAt":"2021-02-05T23:43:43.744Z","updatedAt":"2021-03-13T08:52:18.993Z","user":"5adfa297452bd900036d0f67","category":"5b17221e221bfb00033eafc2","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","__v":0,"parentDoc":null,"children":[],"childrenPages":[]}]},{"_id":"5b17222df184ea0003dee350","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","isAPI":false,"reference":false,"createdAt":"2018-06-05T23:52:13.300Z","from_sync":false,"order":11,"slug":"segments","title":"Segments","__v":0,"pages":[{"_id":"5b1757eb7c623e0003aa1d47","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b17222df184ea0003dee350","user":"5ad7decda3740f0003a5f648","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-06T03:41:31.948Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"While analytics gives us some answers, they also create many more questions:\n\n* Of the people who came to the site, how many visited from the US?\n* Of the US visitors, how many came from search engines?\n* And how much items were purchased by just those visitors?\n\nSegments are a way of saving customer behavioral groups that are important to the user or company. Once a segment is created, it is able to use for quick segmentation in other Woopra features such as Analytics Reports and the People View.\n\nSegmentation allows the user to narrowly focus attention on only the visitors they want to analyze, and probe deeper to make better decisions, leveraging multiple types of data within Woopra. Harnessing Actions/Action Properties, Visit Properties, Visitor Properties or a combination of those within the segmentation filters will help the user to better understand their customers and take action on the valuable data.\n\n***Segments can be found under the Configure section of your Woopra Dashboard.***\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/d933c81-segmentintro.gif\",\n \"segmentintro.gif\",\n 1415,\n 453,\n \"#e4ecfb\"\n ]\n }\n ]\n}\n[/block]","excerpt":"","slug":"segments","type":"basic","title":"Segments","__v":0,"parentDoc":null,"updatedAt":"2018-06-06T18:07:33.526Z","metadata":{"title":"","description":"","image":[]},"children":[{"_id":"5b175a8d3b44af000307670d","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b17222df184ea0003dee350","user":"5adfa297452bd900036d0f67","parentDoc":"5b1757eb7c623e0003aa1d47","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-06T03:52:45.094Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"Woopra’s Segmentation filters allow you to set up powerful behavioral Segments to study the audience that is most important to you and your KPIs.\n\nLeveraging segmentation filters, you can answer some of the most critical questions such as:\n\n1. What behavioral attributes do my customers have in common?\n2. What actions have my customers taken while engaging with my marketing website or product?\n\nOur segmentation filters are both very powerful when it comes to defining your audience and extremely flexible as you can leverage multiple types of data within Woopra.\n\nThe following data points can be applied to the segmentation filters:\n\n- **Actions or associated Action Properties**\n- **Visit or associated Visitor Properties**\n\nMore information about each type of data can be found in [this document](https://docs.woopra.com/docs/understanding-data-in-woopra).\n\n[block:api-header]\n{\n \"title\": \"Action/Action Properties\"\n}\n[/block]\nWhen it comes to understanding what actions customers have performed, it’s always a good idea to start filtering by Actions and Action Properties. \n\nFirst, select the action you want to analyze by – this could be a payment, signup, login or any other custom action you’re tracking within Woopra. Please note that Woopra will default to an action performed *at least once within the last 30 days*. You can always customize how often you want this action to be performed by your customers and what the timeframe for this action is.\n\nAfter selecting an action in the drop-down, you’ll see the “+ Add condition” button underneath the action. This is where you can select your action properties. Note, that for every action Woopra defines two types of action properties:\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/5dbf79b-segmentproperty.gif\",\n \"segmentproperty.gif\",\n 1162,\n 534,\n \"#f9f5fb\"\n ]\n }\n ]\n}\n[/block]\n* *Custom Properties* - These are the custom properties you’ve set up for tracking with your event. Every action will have its own custom action properties – for example, if you’re tracking payment as an event, custom action properties associated with this event could be the payment amount, customers' plan, payment type etc. You can manage custom action properties in your Action Schema. Please check our documentation on tracking custom properties (https://docs.woopra.com/docs/custom-actions-and-visitor-data) for your project. If you have any questions about how to set up custom action properties, consult with your developer or feel free to reach out to us at [email protected].\n* *System Action Properties* – These are the action properties associated with every action you’re tracking in Woopra by default. They include Campaign Name/Source/Medium, Exit/Landing Page, Action Type, and Duration. Check out this document (https://docs.woopra.com/docs/generated-action-properties) on all system action properties that Woopra tracks by default.\n\nSelect an action property that you want to define your event by.\n\n**Note:* You don’t need to select an action property if you want to analyze just only that action, however, action properties can expand your insights if you’d like to get more specific in the analysis you’re performing.*\n\nFor example, you could select “Payment” as an action to see all customers who’ve made a payment. Similarly, you can select “Payment” as an action and add an action property such as “Payment Plan equals Enterprise.” In this case, Woopra would show all Enterprise customers who have made a payment in the defined period.\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/213e6a0-paymentexample.gif\",\n \"paymentexample.gif\",\n 1158,\n 548,\n \"#f6f8fc\"\n ]\n }\n ]\n}\n[/block]\n\n[block:api-header]\n{\n \"title\": \"Aggregation\"\n}\n[/block]\nThe “Aggregation” section of the Segmentation filter allows you to sum up an action or one of its properties. Think of Aggregation as a way of defining how many times a customer has performed or not performed a certain action or the total value of action properties you want to set a constraint for. There are three types of aggregations you’ll find in the Segmentation filter:\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/262e26c-aggregation.png\",\n \"aggregation.png\",\n 1240,\n 758,\n \"#e8f1fb\"\n ]\n }\n ]\n}\n[/block]\n* *Count* – The Count function allows you to define the number of times a customer has performed the action you’re analyzing. An example would be, “customers who’ve made a payment at least three times.” Alternatively, you could set the count to “0” to see customers who have *NOT* performed a certain action. For example, you could segment by, “customers who have never visited your website.”\n* *Count Once Per visit* – The Count Once Per Visit function allows you to define the number of times a customer has done a certain action while having an active session on your website or app. For example, using the Count Once Per Visit function, you could define a constraint such as, show me, “customers who have visited my documentation pages at least times in a single visit.”\n* *Sum of Amount* – The Sum of Amount function enables you to calculate how many times an action was performed within the selected timeframe. For example, by applying Sum of Amount, you could analyze a payment action where the sum of the amount is greater than $5,000. Woopra would then create a Segment of customers who’ve made payments of more than $5,000 *in total* within the time period defined.\n* *Sum of Action Duration* – The sum of Action Duration helps you to sum up the duration of your actions.\n[block:api-header]\n{\n \"title\": \"Timeframe\"\n}\n[/block]\nThe “Timeframe” section allows you to define a date range for the action you’re analyzing. There are three timeframe options:\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/fd21cd6-timeframesegments.png\",\n \"timeframesegments.png\",\n 1230,\n 1158,\n \"#fafbfc\"\n ]\n }\n ]\n}\n[/block]\n* *Preset Timeframe* – You can select a number of timeframe options preset for you such as last 30 days, last 90 days, last 365 days and so on.\n* *Date Range* – Date range allows you to select a static timeframe for your segment, such as “March 4, 2017 through March 16, 2017.”\n* *Relative* – Relative timeframe allows you to select a timeframe that is relative to the present day. This timeframe is dynamic and is updated in real-time. For example, you could select a relative timeframe that’s dynamically updated to look at people who performed an action, “from ten to fifteen days ago.”\n[block:api-header]\n{\n \"title\": \"Visit Properties\"\n}\n[/block]\nYou can apply visit properties in the Segmentation filters within the same drop-down used for action properties. Simply type in the visitor property you’d like to filter by and set the constraint accordingly. For example, you could filter by the visit property “Country” where the country is “Canada.”\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/be80ab2-visitproperty.png\",\n \"visitproperty.png\",\n 1224,\n 830,\n \"#ecf4fb\"\n ]\n }\n ]\n}\n[/block]\nAfter selecting a visit property, you’ll notice that the action section will default to “All Actions.” This means that Woopra will build a segment of customers who have performed any action on you’re tracking and who match the visit property you’ve defined.\n\nYou can always change “All actions” to any action you want to expand your analysis with visit property constraints. For example, you can choose “Payment” as an action, and if the visitor property country is set to Canada, Woopra will create a segment of users who’ve made a payment while being in Canada.\n[block:api-header]\n{\n \"title\": \"Visitor Properties\"\n}\n[/block]\nBy applying visitor properties in the segmentation filters, you could build a segment of customers who match certain demographic, firmographic or behavioral constraints.\n\nFor instance, if you’re tracking “Company” as a visitor property, you can leverage the “Company” visitor property in the filter drop-down and set the company name Slack, for example. Woopra will create a segment of users at the company, Slack, in this example, who’ve engaged with your product within the defined time period.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/8898229-slack.png\",\n \"slack.png\",\n 1218,\n 316,\n \"#d5e7fa\"\n ]\n }\n ]\n}\n[/block]\nPlease note that with visitor properties, you need to define a certain condition you want to filter by. If you’re segmenting by companies, you’ll need to select a company name to filter by. If you’re segmenting by ages, you’ll need to select the age range for your segment.\n[block:api-header]\n{\n \"title\": \"Combining Filters\"\n}\n[/block]\nYou can create multiple Segmentation filters in Woopra to be more specific in defining your Segments. Woopra has the option of combining the filters using the following functions:\n\n * **And**: The “and” parameter will retrieve visitors who match all of the filters.\n * **Or**: The “or” parameter will retrieve visitors who match any of the filters.\n\nFor example, if you want to create a Segment of customers who’ve submitted at least five support tickets within the last 90 days and who have an ARR greater than $10,000, you could create the two following filters:\n\n * Action is set to “Ticket Submitted”, count is “at least 5 times”, and the timeframe is last 90 days\n \n **AND**\n \n * Visitor Property is set to “ARR”, visitor property constraint is “ARR>$10,000.”\n\nAlternatively, if you want to create a Segment of all “United States” customers who’ve started a chat conversation with you or opened a promotional email, you’ll set up segmentation filters as follows:\n\n * Visit Property is country, visit property constraint is USA, action is `“Chat Initiated”`\n\n **OR**\n\n * Visit Property is country, visit property constraint is USA, action is `“Email Opened”`\n\n## Nested Logic Segmentation\n\nIf you have more than two filters that you want to combine, you can leverage even more complex Segmentation called Nested Logic Segmentation. Just drag and drop filter buttons to use this feature.\nLet’s take an example. Say you want to identify all customers that are non-paying, basic customers of your web and mobile app in the last month so that you can determine how to engage with them. Simply add the nested logic statement as shown below:\n\n1. ARR (visitor property) equals 0 AND Email (visitor property) exists AND\n2. Web View (action) at least once in last 30 days OR Mobile View (action) at least once in last 30 days.","excerpt":"","slug":"segmentation-filters","type":"basic","title":"Segmentation Filters","__v":0,"updatedAt":"2020-10-23T00:36:31.329Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2020-10-22T19:18:01.706Z"},{"_id":"5b175ad77c623e0003aa1d82","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b17222df184ea0003dee350","user":"5adfa297452bd900036d0f67","updates":["5c3fb21480bbcd0020385f7c"],"next":{"pages":[],"description":""},"createdAt":"2018-06-06T03:53:59.974Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":1,"body":"Woopra’s Segments allow you to bring together demographics, behaviors and actions to identify groups of customers based on a sequence of actions and/or their engagement with your product.\n\nSegments enable you to quickly act on logical groups, ask the right questions and make your product more valuable to your customers.\n\nYou can build behavioral Segments in the Configure section of Woopra that can be applied to analytics across all Woopra’s report types such as Trends, Journeys and People Reports. You could also build custom Segments within any analytics report and save it in the report with a single click!\n\nTo better understand Segments, think of them as a way of tracking groups of people sharing the same behavioral attributes.\n\nFor example, you may want to save a Segment of customers who’ve submitted at least two support tickets and visited at least four documentation pages within the last 30 days to monitor customers who’ve sought out help. This would allow your customer success team to act faster in resolving issues. Or, you may create a Segment of customers who’ve signed up for your product after downloading a white paper to monitor their engagement and conversion and better understand the ROI of your content marketing.\n[block:api-header]\n{\n \"title\": \"How to Create a new Segment\"\n}\n[/block]\nAs mentioned, there are two ways to create Segments in Woopra. You can either create a Segment in the Configure section of your account or you can create them within an analytics report.\n\n**To create a custom Segment within the Configure Section:** \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/13e6aba-segmentintro.gif\",\n \"segmentintro.gif\",\n 1415,\n 453,\n \"#e4ecfb\"\n ]\n }\n ]\n}\n[/block]\n1. Click on the “Configure” button in the navigation bar.\n2. Click on the “Segments” selection on the sidebar under the “Manage” section.\n3. Click on the “New Segment” button in the top right corner to create a new segment.\n4. Name your Segment, give it a description and select a color. Your selections will determine how your Segment will appear throughout Woopra.\n5. Define a Segment by using the Segmentation filters which can be added by clicking the “+” signs. For more information about how to use filters, please see our documentation on [Segmentation Filters.](https://docs.woopra.com/docs/segmentation-filters)\n\n###Make Visible and Track Actions\n1. You can choose whether or not to display the Segments in People Profiles by clicking to enable. \n7. Select where to track segment join/leave events in the user's profiles. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/7de2d2d-Image_2022-03-24_at_12.53.21_PM.jpg\",\n \"Image 2022-03-24 at 12.53.21 PM.jpg\",\n 1014,\n 198,\n \"#f9f9fa\"\n ]\n }\n ]\n}\n[/block]\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/dd2e846-Segmentwithin.png\",\n \"Segmentwithin.png\",\n 1261,\n 757,\n \"#f4edf6\"\n ]\n }\n ]\n}\n[/block]\n**To create a custom Segment within an analytics report:**\n\n1. Select an analytics report you want to create a Segment for (this could be a Retention report, People report, Journey or Trends reports).\n2. In the “Performed By” section click on the “+” sign to create a new Segment. Please note that in the drop-down menu of the “Performed By” section you can select any segment you’ve created in Woopra before.\n3. Define a Segment by using the Segmentation filters. For more information about how to use filters, please see our documentation on [Segmentation Filters](https://docs.woopra.com/docs/segmentation-filters).\n4. Set up the report you want to create.\n5. Click on the “Run” button to run your Report or the “Save” button if you want to have it saved. Note, that the Segment you’ve created within the report would attach to it so every time you access the report, the Segment will remain. You can always make changes to your Segment within the report and save your changes.\n\n\nYou can also create Segments within [Triggers](https://docs.woopra.com/docs/triggers) and [Scheduled Batches ](https://docs.woopra.com/docs/scheduled-batches)in Woopra.\n\n\n[block:api-header]\n{\n \"title\": \"How To Leverage Segments in Woopra\"\n}\n[/block]\n- **People View Reports** – You can select a segment of visitors you want to see in the [People View Report](https://docs.woopra.com/docs/people-reports), build a customizable table with the segment data and save or export it later on. As an example, you can create a Segment of customers who’ve submitted at least five support tickets within the last 30 days, create a table of these customers showing their first name, last name, company and email address and share this list with your customer success team so they can proactively follow up with these customers on any issues they’re having.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/f952600-segmentinppl2.png\",\n \"segmentinppl2.png\",\n 1157,\n 700,\n \"#f3f4fa\"\n ]\n }\n ]\n}\n[/block]\n- **Journeys** – In [Journeys](https://docs.woopra.com/docs/journeys), you can create specific Segments of customers and see if they complete the journey you’ve designed for them. A good example of leveraging Segments in Journeys would be setting up your onboarding funnel and analyzing if the Segment of customers who’ve clicked on your onboarding emails have a higher propensity to convert than those who haven’t. This would help you understand, for example, the impact your onboarding emails have had on conversions.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/50f59ec-segmentinjourney.png\",\n \"segmentinjourney.png\",\n 963,\n 745,\n \"#f1eef9\"\n ]\n }\n ]\n}\n[/block]\n- **Retention** – In [Retention Reports](https://docs.woopra.com/docs/retention), you can build a behavioral segment of customers to see if they keep coming back to engage with your offering. For example, you can create a Segment of your Enterprise customers and see if they log in to their accounts and continue using your core product features.\n- **Trends Reports** – In [Trends Reports](https://docs.woopra.com/docs/trends), Segments can help you analyze how a particular group of people behaves over time. For instance, you can create a segment of customers who came from your Google Adwords campaign and see how they convert into paying customers over time.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/cd4d23d-trendssegments.png\",\n \"trendssegments.png\",\n 1073,\n 868,\n \"#f7f2fb\"\n ]\n }\n ]\n}\n[/block]\n- **Triggers** – With [Triggers](https://docs.woopra.com/docs/triggers), you can take an action on a Segment you’ve configured in Woopra. For example, you can set up a Segment of customers who’ve recently downgraded and with the help of Woopra’s triggers, every time they log in to their accounts, you can notify your Account Executive team via Slack or Email to initiate a conversation and see what went wrong.\n- **Scheduled Batches** – With [Scheduled Batches](https://docs.woopra.com/docs/scheduled-batches), you can take action on your Segments on a periodic basis. For instance, you can run a Segment of customers who haven’t engaged with your newly-built product feature on a weekly basis, and target these customers with a highly-contextual automated email, leveraging one of our integrations.","excerpt":"","slug":"how-to-create-segments","type":"basic","title":"How to Create Segments","__v":1,"parentDoc":"5b1757eb7c623e0003aa1d47","updatedAt":"2022-03-24T19:58:17.146Z","metadata":{"title":"","description":"","image":[]},"deprecated":false,"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2022-03-24T19:31:12.300Z"}],"childrenPages":[{"_id":"5b175a8d3b44af000307670d","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b17222df184ea0003dee350","user":"5adfa297452bd900036d0f67","parentDoc":"5b1757eb7c623e0003aa1d47","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-06T03:52:45.094Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"Woopra’s Segmentation filters allow you to set up powerful behavioral Segments to study the audience that is most important to you and your KPIs.\n\nLeveraging segmentation filters, you can answer some of the most critical questions such as:\n\n1. What behavioral attributes do my customers have in common?\n2. What actions have my customers taken while engaging with my marketing website or product?\n\nOur segmentation filters are both very powerful when it comes to defining your audience and extremely flexible as you can leverage multiple types of data within Woopra.\n\nThe following data points can be applied to the segmentation filters:\n\n- **Actions or associated Action Properties**\n- **Visit or associated Visitor Properties**\n\nMore information about each type of data can be found in [this document](https://docs.woopra.com/docs/understanding-data-in-woopra).\n\n[block:api-header]\n{\n \"title\": \"Action/Action Properties\"\n}\n[/block]\nWhen it comes to understanding what actions customers have performed, it’s always a good idea to start filtering by Actions and Action Properties. \n\nFirst, select the action you want to analyze by – this could be a payment, signup, login or any other custom action you’re tracking within Woopra. Please note that Woopra will default to an action performed *at least once within the last 30 days*. You can always customize how often you want this action to be performed by your customers and what the timeframe for this action is.\n\nAfter selecting an action in the drop-down, you’ll see the “+ Add condition” button underneath the action. This is where you can select your action properties. Note, that for every action Woopra defines two types of action properties:\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/5dbf79b-segmentproperty.gif\",\n \"segmentproperty.gif\",\n 1162,\n 534,\n \"#f9f5fb\"\n ]\n }\n ]\n}\n[/block]\n* *Custom Properties* - These are the custom properties you’ve set up for tracking with your event. Every action will have its own custom action properties – for example, if you’re tracking payment as an event, custom action properties associated with this event could be the payment amount, customers' plan, payment type etc. You can manage custom action properties in your Action Schema. Please check our documentation on tracking custom properties (https://docs.woopra.com/docs/custom-actions-and-visitor-data) for your project. If you have any questions about how to set up custom action properties, consult with your developer or feel free to reach out to us at [email protected].\n* *System Action Properties* – These are the action properties associated with every action you’re tracking in Woopra by default. They include Campaign Name/Source/Medium, Exit/Landing Page, Action Type, and Duration. Check out this document (https://docs.woopra.com/docs/generated-action-properties) on all system action properties that Woopra tracks by default.\n\nSelect an action property that you want to define your event by.\n\n**Note:* You don’t need to select an action property if you want to analyze just only that action, however, action properties can expand your insights if you’d like to get more specific in the analysis you’re performing.*\n\nFor example, you could select “Payment” as an action to see all customers who’ve made a payment. Similarly, you can select “Payment” as an action and add an action property such as “Payment Plan equals Enterprise.” In this case, Woopra would show all Enterprise customers who have made a payment in the defined period.\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/213e6a0-paymentexample.gif\",\n \"paymentexample.gif\",\n 1158,\n 548,\n \"#f6f8fc\"\n ]\n }\n ]\n}\n[/block]\n\n[block:api-header]\n{\n \"title\": \"Aggregation\"\n}\n[/block]\nThe “Aggregation” section of the Segmentation filter allows you to sum up an action or one of its properties. Think of Aggregation as a way of defining how many times a customer has performed or not performed a certain action or the total value of action properties you want to set a constraint for. There are three types of aggregations you’ll find in the Segmentation filter:\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/262e26c-aggregation.png\",\n \"aggregation.png\",\n 1240,\n 758,\n \"#e8f1fb\"\n ]\n }\n ]\n}\n[/block]\n* *Count* – The Count function allows you to define the number of times a customer has performed the action you’re analyzing. An example would be, “customers who’ve made a payment at least three times.” Alternatively, you could set the count to “0” to see customers who have *NOT* performed a certain action. For example, you could segment by, “customers who have never visited your website.”\n* *Count Once Per visit* – The Count Once Per Visit function allows you to define the number of times a customer has done a certain action while having an active session on your website or app. For example, using the Count Once Per Visit function, you could define a constraint such as, show me, “customers who have visited my documentation pages at least times in a single visit.”\n* *Sum of Amount* – The Sum of Amount function enables you to calculate how many times an action was performed within the selected timeframe. For example, by applying Sum of Amount, you could analyze a payment action where the sum of the amount is greater than $5,000. Woopra would then create a Segment of customers who’ve made payments of more than $5,000 *in total* within the time period defined.\n* *Sum of Action Duration* – The sum of Action Duration helps you to sum up the duration of your actions.\n[block:api-header]\n{\n \"title\": \"Timeframe\"\n}\n[/block]\nThe “Timeframe” section allows you to define a date range for the action you’re analyzing. There are three timeframe options:\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/fd21cd6-timeframesegments.png\",\n \"timeframesegments.png\",\n 1230,\n 1158,\n \"#fafbfc\"\n ]\n }\n ]\n}\n[/block]\n* *Preset Timeframe* – You can select a number of timeframe options preset for you such as last 30 days, last 90 days, last 365 days and so on.\n* *Date Range* – Date range allows you to select a static timeframe for your segment, such as “March 4, 2017 through March 16, 2017.”\n* *Relative* – Relative timeframe allows you to select a timeframe that is relative to the present day. This timeframe is dynamic and is updated in real-time. For example, you could select a relative timeframe that’s dynamically updated to look at people who performed an action, “from ten to fifteen days ago.”\n[block:api-header]\n{\n \"title\": \"Visit Properties\"\n}\n[/block]\nYou can apply visit properties in the Segmentation filters within the same drop-down used for action properties. Simply type in the visitor property you’d like to filter by and set the constraint accordingly. For example, you could filter by the visit property “Country” where the country is “Canada.”\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/be80ab2-visitproperty.png\",\n \"visitproperty.png\",\n 1224,\n 830,\n \"#ecf4fb\"\n ]\n }\n ]\n}\n[/block]\nAfter selecting a visit property, you’ll notice that the action section will default to “All Actions.” This means that Woopra will build a segment of customers who have performed any action on you’re tracking and who match the visit property you’ve defined.\n\nYou can always change “All actions” to any action you want to expand your analysis with visit property constraints. For example, you can choose “Payment” as an action, and if the visitor property country is set to Canada, Woopra will create a segment of users who’ve made a payment while being in Canada.\n[block:api-header]\n{\n \"title\": \"Visitor Properties\"\n}\n[/block]\nBy applying visitor properties in the segmentation filters, you could build a segment of customers who match certain demographic, firmographic or behavioral constraints.\n\nFor instance, if you’re tracking “Company” as a visitor property, you can leverage the “Company” visitor property in the filter drop-down and set the company name Slack, for example. Woopra will create a segment of users at the company, Slack, in this example, who’ve engaged with your product within the defined time period.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/8898229-slack.png\",\n \"slack.png\",\n 1218,\n 316,\n \"#d5e7fa\"\n ]\n }\n ]\n}\n[/block]\nPlease note that with visitor properties, you need to define a certain condition you want to filter by. If you’re segmenting by companies, you’ll need to select a company name to filter by. If you’re segmenting by ages, you’ll need to select the age range for your segment.\n[block:api-header]\n{\n \"title\": \"Combining Filters\"\n}\n[/block]\nYou can create multiple Segmentation filters in Woopra to be more specific in defining your Segments. Woopra has the option of combining the filters using the following functions:\n\n * **And**: The “and” parameter will retrieve visitors who match all of the filters.\n * **Or**: The “or” parameter will retrieve visitors who match any of the filters.\n\nFor example, if you want to create a Segment of customers who’ve submitted at least five support tickets within the last 90 days and who have an ARR greater than $10,000, you could create the two following filters:\n\n * Action is set to “Ticket Submitted”, count is “at least 5 times”, and the timeframe is last 90 days\n \n **AND**\n \n * Visitor Property is set to “ARR”, visitor property constraint is “ARR>$10,000.”\n\nAlternatively, if you want to create a Segment of all “United States” customers who’ve started a chat conversation with you or opened a promotional email, you’ll set up segmentation filters as follows:\n\n * Visit Property is country, visit property constraint is USA, action is `“Chat Initiated”`\n\n **OR**\n\n * Visit Property is country, visit property constraint is USA, action is `“Email Opened”`\n\n## Nested Logic Segmentation\n\nIf you have more than two filters that you want to combine, you can leverage even more complex Segmentation called Nested Logic Segmentation. Just drag and drop filter buttons to use this feature.\nLet’s take an example. Say you want to identify all customers that are non-paying, basic customers of your web and mobile app in the last month so that you can determine how to engage with them. Simply add the nested logic statement as shown below:\n\n1. ARR (visitor property) equals 0 AND Email (visitor property) exists AND\n2. Web View (action) at least once in last 30 days OR Mobile View (action) at least once in last 30 days.","excerpt":"","slug":"segmentation-filters","type":"basic","title":"Segmentation Filters","__v":0,"updatedAt":"2020-10-23T00:36:31.329Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2020-10-22T19:18:01.706Z"},{"_id":"5b175ad77c623e0003aa1d82","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b17222df184ea0003dee350","user":"5adfa297452bd900036d0f67","updates":["5c3fb21480bbcd0020385f7c"],"next":{"pages":[],"description":""},"createdAt":"2018-06-06T03:53:59.974Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":1,"body":"Woopra’s Segments allow you to bring together demographics, behaviors and actions to identify groups of customers based on a sequence of actions and/or their engagement with your product.\n\nSegments enable you to quickly act on logical groups, ask the right questions and make your product more valuable to your customers.\n\nYou can build behavioral Segments in the Configure section of Woopra that can be applied to analytics across all Woopra’s report types such as Trends, Journeys and People Reports. You could also build custom Segments within any analytics report and save it in the report with a single click!\n\nTo better understand Segments, think of them as a way of tracking groups of people sharing the same behavioral attributes.\n\nFor example, you may want to save a Segment of customers who’ve submitted at least two support tickets and visited at least four documentation pages within the last 30 days to monitor customers who’ve sought out help. This would allow your customer success team to act faster in resolving issues. Or, you may create a Segment of customers who’ve signed up for your product after downloading a white paper to monitor their engagement and conversion and better understand the ROI of your content marketing.\n[block:api-header]\n{\n \"title\": \"How to Create a new Segment\"\n}\n[/block]\nAs mentioned, there are two ways to create Segments in Woopra. You can either create a Segment in the Configure section of your account or you can create them within an analytics report.\n\n**To create a custom Segment within the Configure Section:** \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/13e6aba-segmentintro.gif\",\n \"segmentintro.gif\",\n 1415,\n 453,\n \"#e4ecfb\"\n ]\n }\n ]\n}\n[/block]\n1. Click on the “Configure” button in the navigation bar.\n2. Click on the “Segments” selection on the sidebar under the “Manage” section.\n3. Click on the “New Segment” button in the top right corner to create a new segment.\n4. Name your Segment, give it a description and select a color. Your selections will determine how your Segment will appear throughout Woopra.\n5. Define a Segment by using the Segmentation filters which can be added by clicking the “+” signs. For more information about how to use filters, please see our documentation on [Segmentation Filters.](https://docs.woopra.com/docs/segmentation-filters)\n\n###Make Visible and Track Actions\n1. You can choose whether or not to display the Segments in People Profiles by clicking to enable. \n7. Select where to track segment join/leave events in the user's profiles. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/7de2d2d-Image_2022-03-24_at_12.53.21_PM.jpg\",\n \"Image 2022-03-24 at 12.53.21 PM.jpg\",\n 1014,\n 198,\n \"#f9f9fa\"\n ]\n }\n ]\n}\n[/block]\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/dd2e846-Segmentwithin.png\",\n \"Segmentwithin.png\",\n 1261,\n 757,\n \"#f4edf6\"\n ]\n }\n ]\n}\n[/block]\n**To create a custom Segment within an analytics report:**\n\n1. Select an analytics report you want to create a Segment for (this could be a Retention report, People report, Journey or Trends reports).\n2. In the “Performed By” section click on the “+” sign to create a new Segment. Please note that in the drop-down menu of the “Performed By” section you can select any segment you’ve created in Woopra before.\n3. Define a Segment by using the Segmentation filters. For more information about how to use filters, please see our documentation on [Segmentation Filters](https://docs.woopra.com/docs/segmentation-filters).\n4. Set up the report you want to create.\n5. Click on the “Run” button to run your Report or the “Save” button if you want to have it saved. Note, that the Segment you’ve created within the report would attach to it so every time you access the report, the Segment will remain. You can always make changes to your Segment within the report and save your changes.\n\n\nYou can also create Segments within [Triggers](https://docs.woopra.com/docs/triggers) and [Scheduled Batches ](https://docs.woopra.com/docs/scheduled-batches)in Woopra.\n\n\n[block:api-header]\n{\n \"title\": \"How To Leverage Segments in Woopra\"\n}\n[/block]\n- **People View Reports** – You can select a segment of visitors you want to see in the [People View Report](https://docs.woopra.com/docs/people-reports), build a customizable table with the segment data and save or export it later on. As an example, you can create a Segment of customers who’ve submitted at least five support tickets within the last 30 days, create a table of these customers showing their first name, last name, company and email address and share this list with your customer success team so they can proactively follow up with these customers on any issues they’re having.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/f952600-segmentinppl2.png\",\n \"segmentinppl2.png\",\n 1157,\n 700,\n \"#f3f4fa\"\n ]\n }\n ]\n}\n[/block]\n- **Journeys** – In [Journeys](https://docs.woopra.com/docs/journeys), you can create specific Segments of customers and see if they complete the journey you’ve designed for them. A good example of leveraging Segments in Journeys would be setting up your onboarding funnel and analyzing if the Segment of customers who’ve clicked on your onboarding emails have a higher propensity to convert than those who haven’t. This would help you understand, for example, the impact your onboarding emails have had on conversions.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/50f59ec-segmentinjourney.png\",\n \"segmentinjourney.png\",\n 963,\n 745,\n \"#f1eef9\"\n ]\n }\n ]\n}\n[/block]\n- **Retention** – In [Retention Reports](https://docs.woopra.com/docs/retention), you can build a behavioral segment of customers to see if they keep coming back to engage with your offering. For example, you can create a Segment of your Enterprise customers and see if they log in to their accounts and continue using your core product features.\n- **Trends Reports** – In [Trends Reports](https://docs.woopra.com/docs/trends), Segments can help you analyze how a particular group of people behaves over time. For instance, you can create a segment of customers who came from your Google Adwords campaign and see how they convert into paying customers over time.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/cd4d23d-trendssegments.png\",\n \"trendssegments.png\",\n 1073,\n 868,\n \"#f7f2fb\"\n ]\n }\n ]\n}\n[/block]\n- **Triggers** – With [Triggers](https://docs.woopra.com/docs/triggers), you can take an action on a Segment you’ve configured in Woopra. For example, you can set up a Segment of customers who’ve recently downgraded and with the help of Woopra’s triggers, every time they log in to their accounts, you can notify your Account Executive team via Slack or Email to initiate a conversation and see what went wrong.\n- **Scheduled Batches** – With [Scheduled Batches](https://docs.woopra.com/docs/scheduled-batches), you can take action on your Segments on a periodic basis. For instance, you can run a Segment of customers who haven’t engaged with your newly-built product feature on a weekly basis, and target these customers with a highly-contextual automated email, leveraging one of our integrations.","excerpt":"","slug":"how-to-create-segments","type":"basic","title":"How to Create Segments","__v":1,"parentDoc":"5b1757eb7c623e0003aa1d47","updatedAt":"2022-03-24T19:58:17.146Z","metadata":{"title":"","description":"","image":[]},"deprecated":false,"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2022-03-24T19:31:12.300Z"}]}]},{"_id":"5b172236f184ea0003dee351","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","isAPI":false,"reference":false,"createdAt":"2018-06-05T23:52:22.710Z","from_sync":false,"order":12,"slug":"integrations","title":"Integrations","__v":0,"pages":[{"_id":"5b181e92180d310003a73ea3","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b172236f184ea0003dee351","user":"5ad7decda3740f0003a5f648","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-06T17:49:06.958Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"Most companies have snippets of customer interaction information spread all over the place. From email automation, to live chat clients, CRMs to support platforms, companies interact with and engage their customers in many ways from many different sources. To get a full picture of customer engagement across all of these different tools, teams spend much of their time looking at siloed snapshots and piecing them together into a full picture of their users.\n\nWoopra Integrations is a one-of-a-kind feature, which solves this industry-wide problem by instantly connecting Woopra to other tools in a matter of seconds. This greatly enriches the data from tracking custom events and identifying customers on the website or application with Woopra’s SDKs.\n\nIntegrations’ tight connections with CRMs, help desks, email automation systems, live chat tools, and more, allows users to take control of their data, centralizing it in a single platform.\nWoopra’s Integrations are set up in two parts:\n\n* *Snippets* give you multiple SDKs to install on the website or app so the user can start tracking actions with Woopra. Snippets include SDKs for Javascript, Android, iOS, Node.js, Python, Java, and PHP.\n* *Integrations* – Integrations are the external Apps that users can connect to Woopra in just a few clicks.\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/156ee31-Integrations.gif\",\n \"Integrations.gif\",\n 1427,\n 624,\n \"#eaf0fb\"\n ]\n }\n ]\n}\n[/block]\n\n[block:api-header]\n{\n \"title\": \"Setting up Integrations\"\n}\n[/block]\nIntegrations’ Applications are super easy to set up and most of them can be installed with just a few clicks. Users can find Integrations under the Configure module/tab on the dashboard. Once installed and authorized (where necessary), the different apps instantly sync actions from within the given tool to Woopra. The user will be able to use these actions immediately throughout Woopra.\n\nFor example, one can leverage Integrations’ actions as a segmentation filter option in the People Reports. In addition, they can use them to set up a step in the Journey report.\n\nIn addition to bringing data into Woopra, some apps also enable the user to trigger actions in other tools to create more personalized and more relevant customer experiences.\n\nOther apps allow automated scheduling of important reports to different tools so that all teams can easily access important reports from a single location, without requiring different authorizations or permissions in the many different products.\n\n## Set Up the Apps\n\nFirst, go to the Configure section in the Woopra’s navigation bar. Select the *Integrations* icon from the sidebar to access the applications. Click on the app of interest to set it up. Click “Install” in the upper right corner and follow the instructions to authorize the app according to the permissions of the tool.\n\nOnce installed and authorized, select the Setup page to ensure that the tracking of interest is selected. Different apps will allow for enabling or disabling of certain features from this page, so be certain to check for more information.\n[block:api-header]\n{\n \"title\": \"Working With Integrations\"\n}\n[/block]\nAfter installation, any application actions automatically sent or defined by the setup will instantly become available in segmentation filters and Segments throughout all Woopra’s reports as well as action filters in Journeys, Trends, and Retention reports.\n\nTo use Integrations Trigger actions, open the ‘Automate’ section, and select ‘Triggers’ on the sidebar. Configure the conditions that are wished to trigger the action for, select an App Action from the ‘Add Action’ options, and define the conditions appropriately. Click “Create” to save your setup.\n\nTo schedule report uploads to the tool of interest, choose to upload your Analytics reports to the app target by selecting the tool name from the scheduled tasks options. Configure the specific destination you want to send the reports to and the format that you’d like the report to be sent in. Click “Create” to save your setup. \n\n[block:api-header]\n{\n \"title\": \"Use Cases\"\n}\n[/block]\nIntegrations are entirely unique in their ability to bring all of the data together into a single hub, where the user can then analyze and automate actions based on a comprehensive picture of their customer’s interactions, responses to email campaigns, onsite surveys, chat efforts and so on.\n\nLet’s consider a few examples; Using the Zendesk App, a SaaS company may set up a trigger to upgrade ticket status when a customer experiences any kind of error. The recently submitted ticket of a high profile customer could be automatically upgraded to urgent, allowing for faster response times.\n\nAnother example might be an online game company, whose support team closely monitors player activity for any potential abuse. They might make good use of the Hipchat app, which installs a trigger action that allows the user to post custom messages to the Hipchat channels when a given action occurs. This company might set up a trigger to alert the moderators immediately when there may be questionable activity.\n\nIn another example, a sales representative might schedule an upload for a weekly report on new signups, which is automatically shared with product and sales teams, or upload a monthly report on Adwords performance, to be shared with the marketing team and an outside agency.","excerpt":"","slug":"integrations","type":"basic","title":"Integrations","__v":0,"parentDoc":null,"updatedAt":"2018-06-06T21:36:54.508Z","metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"5b4924d2b87d660003dfca21","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b172236f184ea0003dee351","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-07-13T22:16:50.021Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":1,"body":"Google AdWord's auto-tagging makes tracking your AdWords campaigns very easy! But in order to allow it to work with analytics solutions other than Google Analytics, you will have to do a couple extra steps. Luckily, doing these steps will also give you some extra power and customizability in how you define and report on your campaigns.\n\nSome concepts in here may require some familiarity with how urls work and specifically, the query part of the url. For a basic introduction to the concepts used in this article, see [Campaign Tracking](doc:campaign-tracking).\n\n##Configuring Auto-Tagging: the Shared Library\nAdWords has a section in its interface called the \"Shared Library.\" This tab contains account-level settings and defaults that can be used in multiple campaigns. To set up UTM Auto-Tagging to work with Woopra, you need to tell AdWords to send the campaign data in the universal `utm_` format, rather than encoded in the `gclid` that only Google Analytics can read. Here's how:\n\n###Instructions\n1. Navigate to the Shared Library, and then to the \"URL options.\" Note the URL options are not available from manager accounts, only on an individual ad account level.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/95ed5c6-69cd9a4-AdWords_Shared_Library.png\",\n \"69cd9a4-AdWords_Shared_Library.png\",\n 2416,\n 2094,\n \"#f7f7f7\"\n ]\n }\n ]\n}\n[/block]\n2. Turn on Auto-Tagging by clicking the edit button, and selecting the check box. This will tell AdWords to include query parameters to help identify campaigns, etc. with each pageview.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/24564f9-d3a7b64-Screen_Shot_2017-05-04_at_2.59.29_PM.png\",\n \"d3a7b64-Screen_Shot_2017-05-04_at_2.59.29_PM.png\",\n 2034,\n 618,\n \"#f5f6f7\"\n ]\n }\n ]\n}\n[/block]\n3. Create your tracking template. This is creating a template for the urls to which AdWords directs people who click your add. Each campaign may have its own url that a clicked ad will lead to, and using this template will allow AdWords to automatically add other information to the query part of the URL.\n\n The concept here is that you are going to tell AdWords that when creating the url for the link in one of your adds, put it through this template on a per-ad-view basis so that each click gets the right metadata or campaign information in the query. \n\n So the template will look something like: `{base url you provided} ?(begin query)utm_campaign={campagin name}&utm_medium={campaign medium}` and will form a recipe for AdWords to add in the data. When creating the url, the parts in the `{}` braces (called Value Track Parameters, [more here](https://support.google.com/adwords/answer/2375447)) will be exchanged for actual values, while the parts outside will be included literally. A full list of available Value Track parameters is available [here](https://support.google.com/adwords/answer/6305348#urlinsertion).\n\n Here is an actual functional example. You can start with copying this into the template in AdWords, and then you can adjust it as necessary after testing to meet your goals:\n```\n{lpurl}?utm_campaign={campaignid}&utm_source=AdWords&utm_medium={network}&utm_content={creative}&utm_term={keyword}\n```\n Note that `{lpurl}` means the target url for the ad, which you provide to google when building a particular ad--so this will be replaced with the actual page on your site where you want people to go.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/116a534-7ea71d5-AdWords_URL_Auto_Tagging_Template_2.png\",\n \"7ea71d5-AdWords_URL_Auto_Tagging_Template_2.png\",\n 2026,\n 926,\n \"#f6f7f8\"\n ]\n }\n ]\n}\n[/block]\n4. You can click \"test\" and it will run the template and create a test url that you can click to go to one of your pages--usually it will just use the homepage. If you click the test link and load your page, you should see the utm parameters in the url address bar, and you should also see a new pageview action in your profile in Woopra, with campaign data associated with it right there in the interface. AdWords will also note any errors it detects, and you can use this to make sure you are getting all the right campaign data and utm parameters you want.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/7a5268d-bb3f2e8-AdWords_Auto_Tagging_URL_Template_Test.png\",\n \"bb3f2e8-AdWords_Auto_Tagging_URL_Template_Test.png\",\n 2086,\n 1018,\n \"#f1f1f1\"\n ]\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"You can create custom ValueTrack tags to carry things like human-readable campaign name. For more info on this, see [this AdWords Article](https://support.google.com/adwords/answer/6325879).\",\n \"title\": \"Pro Tip:\"\n}\n[/block]","excerpt":"Letting AdWords and Woopra work together on campaign reporting with utm data.","slug":"adwords-auto-tagging","type":"basic","title":"AdWords Auto-Tagging","__v":0,"parentDoc":null,"updatedAt":"2020-10-23T00:44:48.100Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2020-10-22T20:30:05.093Z","children":[],"childrenPages":[]},{"_id":"5b49263a803bee0003f66917","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b172236f184ea0003dee351","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-07-13T22:22:50.524Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":2,"body":"# Key Concepts\nSome of this may be a bit in the weeds for some readers, but this is a semi-technical introduction to how retargeting works, so that you can compose your retargeting triggers as accurately as possible to get what you are expecting.\n\n## Static vs. Dynamic Audiences\nThis is a common concept in CRM's, marketing automation tools, as well as analytics and advertising tools. Briefly, a static audience is like a list of people which can only be changed by explicitly adding a person or removing them. This contrasts with a dynamic audience which is defined by a rule that can be used to evaluate a person, and if that person matches the rule, they are in the audience, otherwise, they are not. \n\nThere is no direct explicit way to add an individual to a dynamic audience without them meeting the rule for the audience. Similarly, there is no way to automatically and implicitly add people to a static audience without enumerating each individual who belongs in the audience.\n\nTo bring this to more concrete terms, a static audience may be a list of people's emails. You can only add or remove a specific email to the audience. A static audience is what you see in Woopra's segments or labels. You can define a number of rules that together make a dynamic audience and each time you ask the system who is in that audience, it will run the query and find exactly who is in it now. A dynamic audience will change over time as well even if you never alter its definition.\n\n## Identifiers\nIn order for two services like Woopra and AdWords to exchange any information about a person, there must be some sort of shared way of identifying that person so that the person is uniquely and unequivocally identified in both services. In this case, there isn't much information \"about\" the person that is being shared, simply the fact that you want this person to be in an audience in your advertising platform for specific messaging, etc., but the concept still applies.\n\nGenerally, services like Adwords and Woopra try to minimize the personal information that is shared to other services for privacy concerns among other reasons. Even if this weren't the case, often the people to whom you want to retarget are not even identified in your platform yet. While we can assume that Google and Facebook probably know who they are, there is no way that those companies will be sharing that information. \n\nSo how does it work?\n\n### Cookies\nEveryone has heard of cookies, but what are they??? Cookies are a vital part of remarketing, so a basic understanding of them will go a long way. The concept is simple but broadly used for different purposes, so it can seem daunting. Very simply, a cookie is a piece of information (usually just a random string) that uniquely identifies a browser to a server. This way, when a browser sends two requests to a server, that server can have the option of using cookies to know that both requests came from the same browser. A request is simply the browser asking a server for a web page.\n\nCookies are set on the browser by the server, and are only sent back to the domain that set them. So if you make a request to woopra.com, and then you login, Woopra will set a cookie on your browser that says you are logged in for future requests. This cookie could automatically become invalid if the server decides that you must log in, say, every 12 hours at least. It is an important security feature that is implemented in all modern browsers, that a cookie is only sent back to the server/domain that set it, and no other services can get access to it.\n\nAdvertisement platforms use this to be able to tell if a person who is not identified, and/or not logged in, is the same person between sessions, and even requests. This seems like a small thing, but it is a keystone in both tools like web analytics and remarketing, as well as in the very experience we have on the internet--it allows web services to provide a more personalized experience, remembering preferences, and showing us the content we tend to find, even if they don't know who we are.\n\nSo in short, a cookie is an **anonymous identifier**. Services use it to uniquely refer to a single person, even if they don't know who that person is and have no personal information on them. This is key to remarketing to people you don't yet know and have not signed up for your service.\n\n### ID Swapping\nOne common approach is to do some sort of id swap. In this case, one tool will keep a database that maps their own ids to some external ids. Woopra does this with some other platforms so that when we want to refer to a person in another platform via an api call, we have that person's id in the other platform available to us. This of course requires that you have an identifier. But what do we do in this case when we don't know the visitor on our website, but we want to tell google to advertise to them? We use what I call, identification by ostension.\n\n### Identification by Ostension\nOstension is definition by pointing. It is how one learns the names of colors, and a good deal of other things as young children. In the case of identifying people, what this means is that we get the AdWords code, the Woopra code, and the website visitor all in one place (on your site), then Woopra can tell AdWords, without using any identifiers, that we want to remarket to **this** person.\n\n## Serverside vs. Clientside Triggers\nOften, retargeting code has to run on the browser because Woopra is using Identification by ostension to tell AdWords, etc. that you want *this* person added to a given audience. Since Woopra often does not even have an identifier for a user, and is not going to be able to get access to google's or facebook's id for the user, this is the only way to do it, as discussed above.\n[block:callout]\n{\n \"type\": \"warning\",\n \"body\": \"Triggering actions must be an event that is tracked from the clientside (user's browser). Woopra's clientside triggers can only be fired as the result of a client-side event. Typically this means a pageview event.\"\n}\n[/block]\n# Specific Apps\n[block:callout]\n{\n \"type\": \"danger\",\n \"body\": \"Retargeting will not work if you're using Google Tag Manager or Segment since they suppress responses from Woopra. You will need to add the Woopra code directly to the pages you're tracking/retargeting for the events to be fired to AdWords or Facebook.\"\n}\n[/block]\n## Google AdWords\nThe AdWords app in Woopra makes use of dynamic audiences only, and uses a cookie-based, clientside identification by ostension.\n\nThe AdWords app will send events to AdWords where you can configure the retargeting based on these events and behaviors. You can install the integration under the integrations page in Woopra, which will allow you to select the retargeting actions in triggers.\n\n###Google Ads setup\nCreate a trigger under the automation section in Woopra. The trigger must be based on a pageview or a clientside event. \n\nOnce you create the trigger, you can add an action and select to retarget to your visitors. You'll need to enter a Conversion ID and a Conversion Label which can be found [here](https://support.google.com/tagmanager/answer/6105160?hl=en). \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/bedc7c2-Image_2020-05-26_at_1.30.38_PM.png\",\n \"Image 2020-05-26 at 1.30.38 PM.png\",\n 2522,\n 1674,\n \"#f6f3f8\"\n ]\n }\n ]\n}\n[/block]\nOnce this is done, you can create a new audience in Google Ads based on website visitors. The members would be \"visitors of a page with a specific tag.\" You can then select the tag you created and use that audience to retarget. \n[block:image]\n{\n \"images\": [\n {\n \"image\": []\n }\n ]\n}\n[/block]\n## Facebook Marketing\n\nThis integration allows you to send events to Facebook which can be used to create audiences to retarget. **These triggers need to be based on a pageview event or some client-side event. **\n\n###The Facebook integration's setup is as follows:\n\n1- Click the install button in the upper right to install the integration under the [integrations page](https://app.woopra.com/project/~/configure/integrations/facebookmktg/about). You do not need to authorize an account. This simply allows you to select the integration when creating a trigger.\n\n2- To create a trigger to send a user to an audience in Facebook, you’ll need to navigate to the Automate tab and create a new trigger event. When you create a new trigger, after you set the ‘Trigger When’ configuration, click to add an action and select the Facebook action.\n\n3- You’ll need the following info to put into the fields: Facebook Account ID and Pixel ID. To create a pixel ID if you do not already have one: https://www.facebook.com/business/help/952192354843755\n\n4- When you have this info, you’ll enter the Account ID and Pixel ID in the fields in Woopra.\n\n5-Enter an Event Name. This could be anything you want to call the event.\n\n6- Set the action toggle to ‘on’ to make the action live. Save the trigger and that’s it!\n\n\n# Common Issues\n## More users in Woopra than Ad Platform\nThere are a number of reasons why you may find that your audience or segment in Woopra has more users in it than are reported in the matching audience in your remarketing tool.\n\nThe biggest reason this will happen is that sometimes, the remarketing tool does not know who the user is. This can especially be the case when creating static audiences based on email addresses. This can be done in Facebook Ads, for example, and where it goes wrong is if Facebook does not have a user associated with the email you've added to the list. One common reason this happens is that the user shared a professional or work email whereas they have signed up to Facebook using a personal email address.\n\nAnother reason that this happens is that data from many retargeting services is sampled. That means that you will only get an approximate number of people in an audience. Further, if the audience is growing quickly, it is likely that this approximate count in the remarketing audience is lagging by a couple days or even by a week behind the actual numbers of incoming people who are being added to the audience.","excerpt":"Tips on getting your retargeting audiences into AdWords, Facebook, etc.","slug":"retargeting-adwords-facebook","type":"basic","title":"Retargeting: AdWords & Facebook","__v":0,"parentDoc":null,"updatedAt":"2022-04-20T19:16:47.676Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-05-28T19:44:47.673Z","deprecated":false,"children":[],"childrenPages":[]},{"_id":"5b4922a3803bee0003f668fd","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b172236f184ea0003dee351","user":"5ad7decda3740f0003a5f648","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-07-13T22:07:31.339Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":3,"body":"Clearbit is a data enrichment partner. Clearbit can enrich your profiles based on email, and ip address. The Clearbit functionality is separated inro two apps. Basic email address-based enrichment is available to all Woopra and Clearbit customers, while the ip-address-based enrichment from Clearbit's Reveal product, is a separate premium integration, and is only available to enterprise Woopra users.\n\n#Example Use Cases\n\n## Clearbit Reveal\nClearbit Reveal is quite simply, a game changer. The prototypical use case is more or less the following: A brand new visitor comes to your website. You send their ip address to Clearbit Reveal. Clearbit responds with company information. You score the company as a lead, and determine a specific personalized experience, or even personalized chat pop-up to show the brand new visitor to your site. i.e.: a Drift Message saying: \"Hello! I see you work at Woopra!. Because you are a B2B SAAS company, I think My Product would be a great fit for you. How about a personal product tour?\" Similarly, you could trigger Optimizely to show a given experiment, or tell Zendesk to prioritize all support and information request tickets from this user.\n\n### Send personalized messages to anonymous site visitors with Woopra, Drift, and Reveal\nHere are the steps to create the example trigger from above, using Clearbit data to inform a Personalized Drift live chat message to new anonymous visitors to your marketing site.\n\n1. Pre-requisites: \n - Make sure Drift and Clearbit Reveal are both installed and authorized in Woopra.\n - Make sure Drift is properly installed on your website. See their docs for help.\n2. Create your trigger: In Woopra, go to Automations > Triggers and create a new trigger.\n3. Define Your trigger:\n - Define the user segment (the criteria a person must meet to cause this trigger to fire.) In this case, the user segment will be something like: `\"People who DID: \"clearbit.identified_by_ip\" AND who ARE: \"clearbit_company.name exists, AND clearbit_company.customer_model is 'B2B' AND clearbit_company.model is 'SAAS' \"`\n - Determine when this trigger should fire for people who match the above criteria. We want this to fire on a pageview event, because on your website is where using a tool like Drift makes sense. (We couldn't fire a drift message based on, say, and \"email received\" event, can we?) So we will set up the trigger to `\"Fire When: 'pageview' \"`\n - Determine the frequency: We probably don't want this to fire constantly on every pageview event, becasue that would be annoying. Let's say \"once per visit\" so that once they dismiss the chat bubble or leave the page, they will not be shown the same chat again immediately, but rather on their next session (the next time they visit our site.) \n - Click \"save\" to make sure all these settings are saved\n4. Set up your Trigger Action: \n - Find the Drift Trigger Action called **Show the Welcome or Away Message** in the menu.\n - Customize your message in the trigger actions settings. You can use Woopra templates in the message content as well. In this case, our message will look like: \n`\"Hello! I see you work at ${visitor.clearbit_company.name}. Because you are a B2B SAAS company, I think My Product would be a great fit for you. How about a personal product tour?\"`\n - Click \"save\" again to save the trigger action settings.","excerpt":"Pointers for setting up and using the Clearbit AppConnect Integrations","slug":"clearbit","type":"basic","title":"Clearbit","__v":0,"parentDoc":null,"updatedAt":"2019-09-27T19:55:49.044Z","metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"5b49287a48ac4f00032108d8","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b172236f184ea0003dee351","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-07-13T22:32:26.145Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":4,"body":"## **HubSpot and Woopra Website Tracking Setup**\nUsing HubSpot to host your website? Getting started with website tracking is easy! \n\n**1)** You'll need to install the Woopra Javascript Tracking Snippet to the Site Header HTML. You can find HubSpot's instructions [here](https://knowledge.hubspot.com/articles/kcs_article/cos-general/how-can-i-add-code-snippets-to-the-head-and-footer-html-of-my-pages) for adding to individual landing pages and where to locate the advanced tracking feature. \n\n**2)** For the integration to function properly, you'll need Woopra's basic Javascript tracking for tracking page views and you'll need to add Woopra's identify tracking to identify the users on your site. This allows Woopra to generate one customer profile for each individual and populate that profile with all the various behavioral data points you're collecting. \n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<!-- Start of Woopra Code -->\\n<script>\\n (function(){\\n var t,i,e,n=window,o=document,a=arguments,s=\\\"script\\\",r=[\\\"config\\\",\\\"track\\\",\\\"identify\\\",\\\"visit\\\",\\\"push\\\",\\\"call\\\",\\\"trackForm\\\",\\\"trackClick\\\"],c=function(){var t,i=this;for(i._e=[],t=0;r.length>t;t++)(function(t){i[t]=function(){return i._e.push([t].concat(Array.prototype.slice.call(arguments,0))),i}})(r[t])};for(n._w=n._w||{},t=0;a.length>t;t++)n._w[a[t]]=n[a[t]]=n[a[t]]||new c;i=o.createElement(s),i.async=1,i.src=\\\"//static.woopra.com/js/w.js\\\",e=o.getElementsByTagName(s)[0],e.parentNode.insertBefore(i,e)\\n })(\\\"woopra\\\");\\n\\n woopra.config({\\n domain: 'mycompany.com'\\n });\\n woopra.track();\\n\\n</script>\\n<!-- End of Woopra Code -->\\n\\n\",\n \"language\": \"text\"\n }\n ]\n}\n[/block]\n##Tracking Hubspot Forms on External Website\nThis a two-part process to successfully track HubSpot forms in Woopra. \n###1. [Data Loader](doc:data-loader-overview) Method\nUsing the Data Loader will allow you to bring in historical data and will not require any coding. You can create the connection under the Connections in the Data Loader section. Once you create the connection, you can create the [Tasks](https://docs.woopra.com/docs/data-loader-overview#schedule-your-tasks) to pull in the data. \n\nFollow the below example of how to set up the Task. Use the 'submittedAt' or 'createdAt' field for the Timestamp.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/c2dbb47-Image_2020-06-17_at_5.23.27_PM.png\",\n \"Image 2020-06-17 at 5.23.27 PM.png\",\n 2442,\n 2374,\n \"#f8f9fa\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"Be sure to add the formName field as one of the Action Properties and label the event name something generic like 'import data loader hubspot form'. Doing this will allow you to create other tasks for other Hubspot forms using the same event name, thus allowing all form events to be track under the same event name instead of creating a new event for every form.\",\n \"title\": \"Event Name\"\n}\n[/block]\n** Limitations**\nDue to limitations with Hubspot's API, we can only pull in one form per task. If you have multiple different forms on your site, you'll need to create a new task for each form and use the same event name for each of the Tasks. \n\nAnother limitation is linking anonymous users and identifying them after they submit a form. When an anonymous user comes to your site, then submits a Hubspot form, this can create two separate profiles if you do not identify them using [woopra.identify](https://docs.woopra.com/reference#track-identify). This is because there is no way to link the two profiles together since Hubspot doesn't pass the Woopra cookie with the Hubspot form. There is a solution but will require changes to the Hubspot form embed code. See the next section for details.\n\n###2. Editing the Hubspot Embed Code\nYou can [customize the embed code in Hubspot](https://developers.hubspot.com/docs/methods/forms/advanced_form_options) to send track requests when the form is submitted. \n\nBelow is an example of the code you can use to link the anonymous profiles with the form submissions from the Data Loader import. You can also edit this code to track all the form fields and not use the Data Loader. \n\nHowever, we suggest using both methods together for two reasons. For one, client-side tracking is not foolproof, and anyone using a blocker or certain browsers can block these events. Using the Data Loader will ensure 100% of the forms being submitted will be tracked in Woopra. Secondly, sending a [woopra.identify()](ref:woopraidentify) call on the client-side will allow you to link anonymous users and identify them so their anonymous browsing history is merged with the profile made from the Data Loader 'hubspot form submit' event. \n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script charset = \\\"utf-8\\\" type = \\\"text/javascript\\\" src=\\\"//js.hsforms.net/forms/shell.js\\\"></script> \\n<script>\\nhbspt.forms.create({\\n portalId: 'YOUR PORTAL ID',\\n formId: 'YOUR FORM ID',\\n onFormSubmit: function($form) {\\n \\n var userData = {\\n email: $form.find(\\\"[name=email]\\\").val(),\\n firstname: $form.find(\\\"[name=firstname]\\\").val(),\\n lastname: $form.find(\\\"[name=lastname]\\\").val(),\\n phone: $form.find(\\\"[name=phone]\\\").val(),\\n usecase: $form.find(\\\"[name=primary_use_case]\\\").val()\\n };\\n \\n woopra.identify(userData);\\n woopra.track(\\\"submited cliet side hubspot form\\\", userData);\\n }\\n}); \\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"danger\",\n \"title\": \"Example Code Only\",\n \"body\": \"The above code is an example that worked during our testing. This may not necessarily work in every case and may need modification.\"\n}\n[/block]\nThis is one example of how you can identify users when they submit the Hubspot form when you're using the Hubspot embed form code.","excerpt":"","slug":"hubspot","type":"basic","title":"HubSpot","__v":0,"parentDoc":null,"updatedAt":"2021-04-07T19:24:17.470Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-04-07T18:57:54.999Z","children":[],"childrenPages":[]},{"_id":"5b492ae201a4610003bb2fdd","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b172236f184ea0003dee351","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-07-13T22:42:42.401Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":6,"body":"Follow the below steps to successfully install the Woopra and Salesforce integration, map fields between the two tools, and setup the Woopra embedded profile feature in Salesforce. \n\n**Note:** You must have both Woopra and Salesforce accounts to access the integration. You must have the Woopra Javascript tracking code on your website, and it must be identifying visitors via email address for the integration to work. If you have not set up Woopra accordingly, please follow steps one and two of the [setup tutorial](http://www.woopra.com/docs/setup/javascript-tracking/) or contact us at [email protected]. \n\n#Installing the Salesforce Integration\n1. Navigate to the “Configure” section of your Woopra instance.\n2. Click on the “Integrations” button on the sidebar.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/123cb75-1a.png\",\n \"1a.png\",\n 2684,\n 1506,\n \"#eff3fb\"\n ]\n }\n ]\n}\n[/block]\n3. Search for the Salesforce integration and click on the app.\n4. Click the “Connect” tab on the top and create a new connection.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/8709fb0-Image_2021-03-18_at_12.33.43_PM.jpg\",\n \"Image 2021-03-18 at 12.33.43 PM.jpg\",\n 2546,\n 1132,\n \"#f5f7f8\"\n ]\n }\n ]\n}\n[/block]\n#Configure the Tasks\nWith our Data Loader connection made, we can pull in any data from your Salesforce Objects. In the following section, we have some examples of how to set up the Tasks to pull in specific data. If you have any questions, please reach out to our support and we can help set up these tasks. \n\nOnce the connection is made, navigate to the \"Task\" tab under the [Data Loader](doc:data-loader-overview) section on the left pane. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/1363b75-Image_2021-03-18_at_12.36.18_PM.jpg\",\n \"Image 2021-03-18 at 12.36.18 PM.jpg\",\n 464,\n 316,\n \"#f8f9fb\"\n ]\n }\n ]\n}\n[/block]\n##\"Lead Created\" Task Example\nClick in the upper right corner to set up a new Task. Here, we'll configure the Task to pull in Leads when they are created using the Lead Object. \n\nFirst we'll configure the Source Configuration as follows: \n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/bfe2e0e-Image_2021-03-18_at_12.43.03_PM.jpg\",\n \"Image 2021-03-18 at 12.43.03 PM.jpg\",\n 2032,\n 978,\n \"#f8f9fa\"\n ],\n \"caption\": \"We are using a \\\"Track\\\" data type since we are pulling in an action when the leads are created.\"\n }\n ]\n}\n[/block]\nNext, we'll configure the mapping, Visitor properties, and Action properties. \n\n**Select and Map**\nFirst, we'll map the lead email to the email in Woopra. This is to tell Woopra what profiles to send the data to. Typically email is the most common mapping. \n\n**Visitor Properties**\nThe Visitor Properties can be any data you want to import from the Lead to enrich Lead profiles\n\n**Action Name** \nIn our example, we used 'sf created lead'. \n\n**Action Properties** \nIt's ok to duplicate what you selected in the Visitor Properties here or simply add properties for the action that are important. We suggest adding at least status as one property. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/f7ebe69-Image_2021-03-18_at_12.45.56_PM.jpg\",\n \"Image 2021-03-18 at 12.45.56 PM.jpg\",\n 2024,\n 2058,\n \"#f4f6f7\"\n ],\n \"caption\": \"This is an example setup of the Lead Import Task. You can follow this, or tweak the imported fields to suit your needs.\"\n }\n ]\n}\n[/block]\n**Timestamp and Cursor** \nSelect CreatedDate for the timestamp and Cursor\n\n**Save and Activate**\nLastly, you can save, preview and activate the task. The task might take some time for the import to complete. The Task will automatically check for new updates at set sync intervals. \n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Double Check Your Fields\",\n \"body\": \"It's important to make sure you have all the fields you want to import selected. It's always a good idea to bring in more data than less because you can always hide fields in Woopra but it's difficult to go back and re-import the data if you need to add a field later. \\n\\nIf you need to add a field later, you'd have to pause and reset the cursor which will remove all the imported data, and you will need to start the task over.\"\n}\n[/block]\n##\"Lead Update\" Task Example\nClick in the upper right corner to set up a new Task. Here, we'll configure the Task to pull in updates to Leads using the LeadHistory and Lead Objects. \n\nFirst, we'll configure the Source Configuration as follows:\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/ea030e2-Image_2021-03-18_at_12.56.57_PM.jpg\",\n \"Image 2021-03-18 at 12.56.57 PM.jpg\",\n 2028,\n 1058,\n \"#f7f8f9\"\n ],\n \"caption\": \"We will need to join the Leadhistory object with the Lead object to make sure we have the lead email field available to us to map.\"\n }\n ]\n}\n[/block]\nNext, we'll configure the mapping, Visitor properties, and Action properties. \n\n**Select and Map**\nFirst, we'll map the lead email to the email in Woopra. This is to tell Woopra what profiles to send the data to. Typically email is the most common mapping. \n\n**Visitor Properties**\nWe'll leave these blank for this Task.\n\n**Action Name** \nIn our example, we used 'lead ${Field} update'. This will create multiple different events for the types of updates. These include Lead updates for leadmerged, leadconverted, owner, created, status, ownerassignment, title company, and other history updates. \n\n**Action Properties** \nSelect from the LeadHistory Object the following: Field, OldValue, and NewValue. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/9599b02-Image_2021-03-18_at_1.01.59_PM.jpg\",\n \"Image 2021-03-18 at 1.01.59 PM.jpg\",\n 2018,\n 1442,\n \"#f6f8f9\"\n ]\n }\n ]\n}\n[/block]\n**Timestamp and Cursor** \nSelect CreatedDate for the timestamp and Cursor\n\n**Save and Activate**\nLastly, you can save, preview and activate the task. The task might take some time for the import to complete. The Task will automatically check for new updates at set sync intervals. \n\n##\"Opportunity History Update\" Task Example\nSince the Opportunity Object can be connected to multiple emails, we can only map Opportunity history events to the main contact. To do this, we will need to create several joins using the OpportunityHistory, OpportunityContactRole, Contact, and Opportunity Objects. \n\nPlease configure the joins in this exact way:\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/465aabb-Image_2021-03-18_at_2.17.51_PM.jpg\",\n \"Image 2021-03-18 at 2.17.51 PM.jpg\",\n 2758,\n 1130,\n \"#f7f8fa\"\n ]\n }\n ]\n}\n[/block]\n**Select and Map**\nFirst, we'll map the Contact email to the email in Woopra. This is to tell Woopra what profiles to send the data to. Typically email is the most common mapping. \n\n**Visitor Properties**\nWe'll leave these blank for this Task.\n\n**Action Name** \nIn our example, we used 'opportunity history update' as the Action Name. \n\n**Action Properties** \nYou can customize what you want to bring in, but we recommend at least opportunityid, stagename, closedate as standard fields. If you add more, remember it's better to bring in more than fewer fields. Bring in anything you think you *might* need. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/0cec1be-Image_2021-03-18_at_2.22.37_PM.jpg\",\n \"Image 2021-03-18 at 2.22.37 PM.jpg\",\n 2032,\n 2074,\n \"#f3f5f7\"\n ]\n }\n ]\n}\n[/block]\n**Timestamp and Cursor** \nSelect CreatedDate for the timestamp and SytemModstamp for the cursor.\n\n**Save and Activate**\nLastly, you can save, preview and activate the task. The task might take some time for the import to complete. The Task will automatically check for new updates at set sync intervals. \n\n#Adding the Embedded Profile Widgets in Salesforce\n\n1. Log in to Salesforce as an administrator and select “Setup” in the top navigation. \n2. Under “Build” select the “Leads” dropdown. \n3. Select “Page Layout” to customize the page layout for your leads. \n4. Click on “Edit Layout”\n5. Under VisualForce Pages, add a Section and set the Section Properties so that the layout is 1-Column. Name your section.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/ea71e5d-6.png\",\n \"6.png\",\n 2006,\n 1366,\n \"#dadfe3\"\n ]\n }\n ]\n}\n[/block]\n6. Next, drag the “WoopraLeadProfile” to the section you just created.\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/50d29d8-7.png\",\n \"7.png\",\n 2376,\n 1250,\n \"#e9e7e5\"\n ]\n }\n ]\n}\n[/block]\n7. Scroll to the added Woopra Profile, click on the configuration button and add the following settings for width and height.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/641a945-8.png\",\n \"8.png\",\n 1934,\n 1114,\n \"#dddddc\"\n ]\n }\n ]\n}\n[/block]\n8. Hit “Save” and you’re all set. Follow the same instructions to add the Woopra profile to the Contact layout and save!\n\n##Configure Settings to Allow Salesforce Users to See Profiles\nYou'll need to provide Woopra access keys for Salesforce Visualforce pages. If the access keys are not provided, the Visualforce page will rely on the current user being logged into Woopra and you may not see the profiles populate. \n\nTo fix this, the following configuration needs to be edited in Salesforce:\n\n1. Go to Settings > App Setup > Develop > Custom Settings\n\n2. Click on Manage next to “WoopraSettings”\n\n3. Click on Edit\n\n**Note**: Woopra needs to map by email address at the lead and contact level to embed the live Woopra profile. Be sure that you've set up to map by email address in your Woopra configuration.","excerpt":"","slug":"salesforce","type":"basic","title":"Salesforce","__v":0,"parentDoc":null,"updatedAt":"2022-05-20T18:30:48.318Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-03-18T19:10:44.989Z","deprecated":false,"children":[],"childrenPages":[]},{"_id":"5b4922fa01a4610003bb2f76","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b172236f184ea0003dee351","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-07-13T22:08:58.093Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":7,"body":"[block:embed]\n{\n \"html\": \"<iframe class=\\\"embedly-embed\\\" src=\\\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FWuM0VPLHBFg%3Ffeature%3Doembed&url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DWuM0VPLHBFg&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FWuM0VPLHBFg%2Fhqdefault.jpg&key=f2aa6fc3595946d0afc3d76cbbd25dc3&type=text%2Fhtml&schema=youtube\\\" width=\\\"854\\\" height=\\\"480\\\" scrolling=\\\"no\\\" frameborder=\\\"0\\\" allow=\\\"autoplay; fullscreen\\\" allowfullscreen=\\\"true\\\"></iframe>\",\n \"url\": \"https://www.youtube.com/watch?v=WuM0VPLHBFg&feature=youtu.be\",\n \"title\": \"Wordpress Final Video Tutorial\",\n \"favicon\": \"https://s.ytimg.com/yts/img/favicon-vfl8qSV2F.ico\",\n \"image\": \"https://i.ytimg.com/vi/WuM0VPLHBFg/hqdefault.jpg\"\n}\n[/block]\n# WordPress Installation\nThe WordPress app seamlessly tracks all WordPress events, such as when a visitor performs a search on your website, which articles (Woopra considers blog posts as articles) they read, pageviews, and more. This integration makes it extremely simple for you to access a comprehensive WordPress-customized analytics suite within minutes.\n\nWith the WordPress app, you will have access to reports detailing top authors, top categories, reader retention, and more.\n\nNote: This plugin automatically adapts to the WooCommerce WordPress plugin so that you can seamlessly track e-commerce transactions as well.\n\nIf your site is powered by WordPress, there are two ways to install the Woopra plugin:\n\n## Automatic Install\n1. Sign in to your WordPress Dashboard at yourdomain.com/wp-admin\n2. Click on the “PlugIns” menu-item in the menu on the left\n3. Below “PlugIns” in the menu on the left, click “Add New”\n4. Search for Woopra\n5. Click “Install Now” underneath the Woopra plugin\n6. You can view your site’s stats by visiting https://app.woopra.com/\n\n## Manual Install\n1. Download the Woopra WordPress Plugin from http://wordpress.org/plugins/woopra/\n2. Extract the Woopra.zip file to a location on your local machine\n3. Upload the Woopra folder and all contents into the /plugins/ directory\n4. You can view your site’s stats by visiting https://app.woopra.com\n\n## Using this App\nAfter installation, you will need to configure the events that you wish to track within your WordPress dashboard. You can find these options by selecting Settings, then select Woopra from the list.\n\n## Form Tracking \nWe recommend using the Contact Forms 7 or Gravity Forms plugin. \n\n###Contact Forms 7\nIn the following example, we are using Contact Forms 7: https://wordpress.org/plugins/contact-form-7/. \n\nOnce you have installed the Wordpress Plugin and Contact Forms 7 you can add the following code to the header.php file found under the theme settings. You will insert the code after the <?php wp_head(); ?> \n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<script>\\ndocument.addEventListener( 'wpcf7mailsent', function( event ) {\\n\\twoopra.identify({\\n\\t\\tname: document.querySelector(\\\"input[name=your-name]\\\").value,\\n \\t\\temail: document.querySelector(\\\"input[name=your-email]\\\").value\\n\\t});\\n\\n\\n    woopra.track(\\\"submit form\\\", {\\n\\tmessage: document.querySelector(\\\"textarea[name=your-message]\\\").value\\n})\\n})\\n</script>\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nAfter you save the file, you can test to see if your forms are being correctly tracked in Woopra. To test, you can find your profile before you submit the form, then refresh the list of users in the people profiles and see if your profile has been updated with the information you submitted.\n\n###Gravity Forms Example\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<?php\\n\\nadd_action(\\\"gform_after_submission_1\\\", \\\"woopra_contact_form\\\", 10, 2);\\n\\nfunction woopra_contact_form($entry, $form) {\\n $data = array(\\n \\\"fullname\\\" => $entry[1],\\n \\\"email\\\" => $entry[2],\\n \\\"phone\\\" => $entry[3],\\n \\\"website\\\" => $entry[4],\\n \\\"subject\\\" => $entry[5] \\n );\\n$user_data = array (\\n \\\"name\\\" => $entry[1],\\n \\\"email\\\" => $entry[2]\\n);\\n do_action(\\\"woopra_identify\\\", $user_data);\\n do_action(\\\"woopra_track\\\", \\\"contact form\\\", $data, true);\\n}\\n\\n?>\",\n \"language\": \"php\"\n }\n ]\n}\n[/block]","excerpt":"Guide to installing Woopra on a Wordpress site","slug":"wordpress","type":"basic","title":"WordPress","__v":0,"parentDoc":null,"updatedAt":"2020-12-23T18:17:15.471Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"children":[],"childrenPages":[]},{"_id":"5b49236fb87d660003dfca0d","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b172236f184ea0003dee351","user":"5ad7decda3740f0003a5f648","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-07-13T22:10:55.917Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":8,"body":"1. Login to your site.\n2. Click Administer -> Site Building -> Blocks -> Add Block.\n3. Give the new block a Block Description of Woopra. Leave the title blank.\n4. Copy the JavaScript snippet provided in the JavaScript app in AppConnect.\n5. Just below the Block Body, click the Input Format, and set it to PHP code.\n - Note* If this option is not available, cancel and make sure you have the PHP filter enabled in your modules section and then start again.\n6. Scroll down and click Save Block.\n7. In the list of Blocks you should now see Woopra and the Region set to None.\n8. Set the Region to be whatever is closest to the header. Some themes have a left/right/center/header/footer. Any placement should work but the closer to the header, the better.\n9. Scroll down and click Save Blocks.\n10. Once the code is installed, you can view your site’s stats by visiting from an up-to-date browser. Woopra works best in Chrome and Safari but FireFox works as well.","excerpt":"","slug":"drupal","type":"basic","title":"Drupal","__v":0,"parentDoc":null,"updatedAt":"2019-09-27T19:55:49.048Z","metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"5ce735169f55520030c6ccd7","version":"5b070ce4060bee00035d8d12","updatedAt":"2022-03-22T00:33:51.420Z","createdAt":"2019-05-24T00:04:38.151Z","project":"58b721a1f22b830f009a0bcd","category":"5b172236f184ea0003dee351","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":10,"body":"#You can find our Woopra connector [here](https://zapier.com/developer/public-invite/106494/b1dbaf4aef1f158b3858cb7301ae9cc9/)\n[block:callout]\n{\n \"type\": \"danger\",\n \"title\": \"Zapier Issues\",\n \"body\": \"While Zapier is good to send some events to Woopra, there are some pitfalls to be aware of. Unless the user is identified on your site first, before the Zapier event is sent, there may be issues linking anonymous profiles with the data you are sending from Zapier. We will merge profiles based on a [heirarchy](doc:unique-identifiers-and-profile-merging) of IDs. The issue is that without one of the IDs to merge on, this can cause split profiles. As long as you set one of these ID's using the identity function on your site, you could then set that ID to send with the Zapier event so Woopra will know which profile to put the event on. \\n\\nFor example, if a user comes to your site and is required to register on your site with an email, you would first have them register and send their email address from your site directly to Woopra using the woopra.identify function. Then, let's say you are using some 3rd party app on your site where they can request demos. Let's assume that you have connected this app to Zapier and you then want to send Zaps to Woopra. When you send this Zap to Woopra, you would send their email with the demo request info. Since it is being sent with their email, Woopra will know to automatically merge these profiles (previous browsing history profile and the new demo request profile) because they share the same email. This way you will have all the previous browsing history along with the demo request data you sent from Zapier all in the same profile. \\n\\nTaking the same example, if the user does not enter their email (or some other unique identifier) on your site first, they will have an anonymous profile in Woopra. Then, when you send the registration event through Zapier with an email, Woopra will not know which profile to attach this to. It will create a new profile. To remedy this, you would need to identify the user first on your site, then send the registration info.\"\n}\n[/block]\n##Usage\n###1. Add an initial trigger such as Catch Hook. You will need to configure this to your specs.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/f215996-Image_2019-05-23_at_5.13.28_PM.png\",\n \"Image 2019-05-23 at 5.13.28 PM.png\",\n 2616,\n 660,\n \"#f9fafa\"\n ]\n }\n ]\n}\n[/block]\n###2. Add an action and search for the Woopra Connector. Use the *latest* version. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/f5d9c02-Image_2022-03-21_at_5.30.50_PM.jpg\",\n \"Image 2022-03-21 at 5.30.50 PM.jpg\",\n 1518,\n 1262,\n \"#ededec\"\n ]\n }\n ]\n}\n[/block]\n\n###2. Setup your Zap\n1. Entering your project name (e.g. yoursite.com)\n2. Connect any data from your trigger to the Woopra fields (e.g. email, custom event, etc.)\n3. Test. Send some test events and check them in Woopra to make sure the events to being sent correctly.\n4. Save and activate your Zap.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/837834e-Image_2022-03-21_at_5.33.00_PM.jpg\",\n \"Image 2022-03-21 at 5.33.00 PM.jpg\",\n 1812,\n 2068,\n \"#f0f3f8\"\n ],\n \"sizing\": \"full\"\n }\n ]\n}\n[/block]","excerpt":"You can use our Woopra Zapier connection to send events to Woopra from other applications.","slug":"zapier","type":"basic","title":"Zapier","__v":0,"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-04-07T18:57:55.628Z","deprecated":false,"children":[],"childrenPages":[]},{"_id":"5e791e446a1ceb0011af2933","metadata":{"image":[],"title":"","description":""},"api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"next":{"description":"","pages":[]},"title":"Pardot","updates":[],"type":"basic","slug":"pardot","excerpt":"","body":"#Features\n#Automations and Triggers\n* **Add to List** - Add this visitor to a Pardot email list\n* **Remove from List** - Remove this visitor from a Pardot email list\n\n#Under the Hood\n##App-Managed Hidden Triggers\n* **Fetch Visitor Email** - Hidden Trigger to find prospect by id and fetch email from pardot if it's missing from the Woopra profile.\n\n##Scheduled Tasks\n* **Fetch Pardot Events** - Automatically fetch visitor events from Pardot on a regular basis.\n\n#Schemas\n##Tracked Events\n* **Pardot Opened Email** - A visitor opened an email sent via Pardot.\n* **Pardot View** - A visitor performed the Pardot view action. This could be a number of different view types.\n* **Pardot Success** - Visitor completed Pardot Success. This is usually a defined conversion event in your Pardot instance.\n* **Pardot Email Bounced** - An Email sent to this visitor via Pardot was Bounced.\n* **Pardot Unsubscribed** - The visitor went to the unsubscribe page.\n* **Pardot Custom Url Click** - The visitor clicked a custom URL in an email sent via Pardot.\n* **Pardot Click** - The visitor clicked in an email sent via Pardot.\n* **Pardot Opportunity Lost** - The opportunity associated with this user in Pardot was marked as lost.\n* **Pardot Opportunity Linked** - The Opportunity in Pardot associated with this visitor was linked.\n* **Pardot Email Sent **- An email was sent to this visitor via Pardot.\n* **Pardot Viewed Email Preferences Page** - The visitor went to the email preferences page in Pardot.\n* **Pardot Error** - The visitor had an error in Pardot.\n* **Pardot New Opportunity** - The visitor became a new opportunity in Pardot.\n* **Submitted Pardot Spam Complaint **- The visitor reported an email sent via Pardot as spam.\n* **Pardot Resubscribed** - The visitor re-subscribed to Pardot emails.\n* **Pardot Opportunity Won** - The opportunity associated with this user in Pardot was marked as won.\n* **Pardot Opportunity Reopened** - The opportunity associated with this user in Pardot was re-opened.\n\n##Visitor Properties\n* **Pardot Prospect ID** - This Field is the person's prospect ID in Pardot. Do not change it!\n* **Pardot Visitor ID** - This Field is the person's visitor ID in Pardot. Do not change it!\n* **Last Pardot Inbound Sync At** - Timestamp of last Pardot sync event for this user. Do not change it!\n\n#Instructions\n1) Click install and authorize with your Pardot admin email, password, and API user key.\n\n2) Configure the integration by setting your property mapping and sync settings.\n\n3) Select the Pardot events you'd like to track in Woopra.\n\n4) Select \"Apply Configuration\" and you're done!\n\nThe integration will also automatically install triggers in the [Triggers](doc:triggers) section that you can use to add and remove visitors to email lists, dynamically update contact data and more!","order":12,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"createdAt":"2020-03-23T19:14:43.003Z","updatedAt":"2020-03-23T20:46:05.110Z","user":"5adfa297452bd900036d0f67","category":"5b172236f184ea0003dee351","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","__v":0,"parentDoc":null,"children":[],"childrenPages":[]},{"_id":"6078ac69ff415c002d00e8a3","metadata":{"image":[],"title":"","description":""},"api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"next":{"description":"","pages":[]},"title":"Shopify","updates":[],"type":"basic","slug":"shopify","excerpt":"How to use and install the Shopify integration","body":"[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"For some guided help connecting Shopify, please contact [email protected] and we'll gladly hop a call to walk you through the process.\"\n}\n[/block]\nThe Woopra + Shopify Integration enables you to import order data for use in your customer analytics.\n\nSince this integration uses our Dataloader connection, this means you can import historical data from Shopify. This also means that we have access to certain tables in Shopify where you can customize what data you want to import to Woopra.\n\nThis integration makes it easy to do reporting on revenue and sales. With the right setup, it’s possible to see your customer’s complete journey from marketing campaigns all the way to checking out.\n\n#Installation\nNavigate to the integration section and search for Shopify. Click the connect tab and create a new connection. You'll be prompted to enter your connection details. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/98fdd0e-Image_2021-04-15_at_2.25.29_PM.jpg\",\n \"Image 2021-04-15 at 2.25.29 PM.jpg\",\n 2384,\n 914,\n \"#f4f6f8\"\n ]\n }\n ]\n}\n[/block]\n#Updating the Tracking Code in Shopify\nBefore you start importing, it's important to update your tracking code for Shopify. There will be two places to update the code--the main website tracking and the tracking checkout pages. \n\nTo do this, you'll need to edit the Shopify 'header.liquid' and 'checkout.liquid' files. This will allow the orders to be tracked correctly in Woopra\n\n1. From your Shopify admin first find the 'header.liquid' file. Typically this should be under Online Store > Themes.\n\n2. Find the theme you want to edit, and then click Actions > Edit code.\n\n3. Add the following code inside of the <head>. \n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<!-- Start of Woopra Code -->\\n<script>\\n !function(){var t,o,c,e=window,n=document,r=arguments,a=\\\"script\\\",i=[\\\"call\\\",\\\"cancelAction\\\",\\\"config\\\",\\\"identify\\\",\\\"push\\\",\\\"track\\\",\\\"trackClick\\\",\\\"trackForm\\\",\\\"update\\\",\\\"visit\\\"],s=function(){var t,o=this,c=function(t){o[t]=function(){return o._e.push([t].concat(Array.prototype.slice.call(arguments,0))),o}};for(o._e=[],t=0;t<i.length;t++)c(i[t])};for(e.__woo=e.__woo||{},t=0;t<r.length;t++)e.__woo[r[t]]=e[r[t]]=e[r[t]]||new s;(o=n.createElement(a)).async=1,o.src=\\\"https://static.woopra.com/js/w.js\\\",(c=n.getElementsByTagName(a)[0]).parentNode.insertBefore(o,c)}(\\\"woopra\\\");\\n\\n woopra.config({\\n domain: \\\"domain.com\\\",\\n outgoing_tracking: true,\\n download_tracking: true,\\n click_tracking: true\\n });\\n\\n {%- if customer -%}\\n woopra.identify({\\n id: {{ customer.id | json }},\\n name: {{ customer.name | json }},\\n email: {{ customer.email | json }}, \\n order_count: {{ customer.orders_count | json }},\\n total_spent: {{ customer.total_spent | json }}\\n });\\n {%- endif -%}\\n\\n woopra.track();\\n</script>\\n<!-- End of Woopra Code -->\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n4. Track the checkout pages. Insert the tracking snippet below to your 'checkout.liquid' file. This tracking code will identify logged in customers and customers who are checking out as guests.\n\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<!-- Start of Woopra Code -->\\n<script>\\n !function(){var t,o,c,e=window,n=document,r=arguments,a=\\\"script\\\",i=[\\\"call\\\",\\\"cancelAction\\\",\\\"config\\\",\\\"identify\\\",\\\"push\\\",\\\"track\\\",\\\"trackClick\\\",\\\"trackForm\\\",\\\"update\\\",\\\"visit\\\"],s=function(){var t,o=this,c=function(t){o[t]=function(){return o._e.push([t].concat(Array.prototype.slice.call(arguments,0))),o}};for(o._e=[],t=0;t<i.length;t++)c(i[t])};for(e.__woo=e.__woo||{},t=0;t<r.length;t++)e.__woo[r[t]]=e[r[t]]=e[r[t]]||new s;(o=n.createElement(a)).async=1,o.src=\\\"https://static.woopra.com/js/w.js\\\",(c=n.getElementsByTagName(a)[0]).parentNode.insertBefore(o,c)}(\\\"woopra\\\");\\n\\n woopra.config({\\n domain: \\\"domain.com\\\",\\n outgoing_tracking: true,\\n download_tracking: true,\\n click_tracking: true\\n });\\n\\n {%- if checkout.email -%}\\n woopra.identify({\\n email: {{ checkout.email | json }}\\n });\\n {%- endif -%}\\n\\n {%- if customer -%}\\n woopra.identify({\\n id: {{ customer.id | json }},\\n name: {{ customer.name | json }},\\n email: {{ customer.email | json }}, \\n order_count: {{ customer.orders_count | json }},\\n total_spent: {{ customer.total_spent | json }}\\n });\\n {%- endif -%}\\n\\n woopra.track();\\n</script>\\n<!-- End of Woopra Code -->\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n#Setting up the Task\nThe [Task](https://docs.woopra.com/docs/data-loader-overview#schedule-your-tasks) is used to pull in selected data from Shopify. You can create a new Task if one wasn't added by navigating to the Task section under [Data Loader](doc:data-loader-overview).\n\n1. From there configure the Task by selecting the Order table. You will also select the data type as 'Track'.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/b6f33e9-Image_2021-12-14_at_2.46.42_PM.jpg\",\n \"Image 2021-12-14 at 2.46.42 PM.jpg\",\n 1998,\n 794,\n \"#fbfcfc\"\n ],\n \"caption\": \"Add any additional conditions if you want to limit the orders to a specific timeframe. Use the created_at timestamp to filter the data.\"\n }\n ]\n}\n[/block]\n2. Map User Action. First Map the order.email to \"email\" in Woopra.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/2a2cea9-Image_2021-12-14_at_2.47.27_PM.jpg\",\n \"Image 2021-12-14 at 2.47.27 PM.jpg\",\n 1488,\n 374,\n \"#f1f4f6\"\n ]\n }\n ]\n}\n[/block]\n3. Name your Action and add Action Properties. Important fields would be total_price, order_id, checkout_id. Also, add any additional fields that are important to you.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/e0a68bb-Image_2021-04-15_at_2.45.15_PM.jpg\",\n \"Image 2021-04-15 at 2.45.15 PM.jpg\",\n 1768,\n 976,\n \"#eff2f5\"\n ]\n }\n ]\n}\n[/block]\n4. Tag Visitor Properties. This is data about the user that you want to import. You can select any Visitor properties you'd like but be sure to add email.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/5c5fd84-Image_2021-04-15_at_2.44.07_PM.jpg\",\n \"Image 2021-04-15 at 2.44.07 PM.jpg\",\n 1676,\n 842,\n \"#eff2f4\"\n ]\n }\n ]\n}\n[/block]\n5. Select the Timestamp as created_at. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/090aa93-Image_2021-04-15_at_2.47.01_PM.jpg\",\n \"Image 2021-04-15 at 2.47.01 PM.jpg\",\n 1170,\n 186,\n \"#f7f8f9\"\n ]\n }\n ]\n}\n[/block]\n6. Save, Preview, and Activate. The import will start to bring in records. This may take some time to complete depending on the amount of data.","order":13,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-04-14T22:55:21.951Z","createdAt":"2021-04-15T21:13:13.507Z","updatedAt":"2021-12-15T00:01:49.992Z","user":"5adfa297452bd900036d0f67","category":"5b172236f184ea0003dee351","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","__v":0,"parentDoc":null,"deprecated":false,"children":[],"childrenPages":[]},{"_id":"62391c020dee82001abcc524","metadata":{"image":[],"title":"","description":""},"api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"next":{"description":"","pages":[]},"title":"LiveChat","updates":[],"type":"basic","slug":"livechat","excerpt":"","body":"To use our LiveChat integration, you must set up trigger events in Woopra. These triggers will inject Woopra code on your page to send us LiveChat events. \n\nWith this integration we can track the following: Post-chat survey submitted, rating submitted, end chat, chat msg received, chat msg sent, pre-chat survey submitted, minimize window, start chat, show window, and hide window events. \n\n##To install \n1. From the Integrations page for LiveChat, then click on the \"+ New Trigger\" button. \n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/fee88b7-Image_2022-03-21_at_5.38.33_PM.jpg\",\n \"Image 2022-03-21 at 5.38.33 PM.jpg\",\n 2502,\n 1738,\n \"#f4f7f8\"\n ]\n }\n ]\n}\n[/block]\n2. Configure the trigger action to match the below settings. Name the trigger, set the trigger to a page view event, and set the frequency to \"always.\"\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/f6d03cf-Image_2022-03-21_at_5.40.16_PM.jpg\",\n \"Image 2022-03-21 at 5.40.16 PM.jpg\",\n 630,\n 314,\n \"#f7efef\"\n ]\n }\n ]\n}\n[/block]\n3. Configure the Target. Click \"Add Target\" at the bottom and select what events you want to track in Woopra. Search for \"livechat\" to see the available trigger events.\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/ea1d931-Image_2022-03-21_at_5.49.30_PM.jpg\",\n \"Image 2022-03-21 at 5.49.30 PM.jpg\",\n 1032,\n 378,\n \"#c3d0e7\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\nYou can add multiple targets for the different events like you see below.\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/8eed54b-Image_2022-03-21_at_5.51.14_PM.jpg\",\n \"Image 2022-03-21 at 5.51.14 PM.jpg\",\n 2490,\n 2842,\n \"#ebf1f5\"\n ]\n }\n ]\n}\n[/block]\n4. Save the trigger. After you save and set the trigger live, you will start to see the events come in.","order":14,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2022-03-21T20:25:33.787Z","createdAt":"2022-03-22T00:44:50.809Z","updatedAt":"2022-03-22T00:53:46.017Z","user":"5adfa297452bd900036d0f67","category":"5b172236f184ea0003dee351","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","__v":0,"parentDoc":null,"children":[],"childrenPages":[]}]},{"_id":"5b172556221bfb00033eafea","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","isAPI":false,"reference":false,"createdAt":"2018-06-06T00:05:42.290Z","from_sync":false,"order":13,"slug":"people-profiles","title":"People","__v":0,"pages":[{"_id":"5b1820f37e8f8f0003bd9a0d","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b172556221bfb00033eafea","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-06T17:59:15.645Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"From the beginning, we’ve believed that people matter in analytics. Understanding each customer's behavior allows users to individualize the experience and sets the foundation for true personalization.\n\nWoopra’s Profiles deliver a full behavioral history for each customer that's tied to visitor data such as their name, email address, account size and any other profile attributes the user chooses to include.\n[block:api-header]\n{\n \"title\": \"Anonymous vs. Identified Visitors\"\n}\n[/block]\nWoopra tracks both anonymous and identified visitors. Identified visitors are tracked by their email address or other unique identifiers, and anonymous visitors are tracked by cookies.\n\nOnce an anonymous visitor is identified (by providing their email address through a form, signing up, making their first purchase, etc.), Woopra aggregates all previous anonymous activity into a single customer profile.\n\nTo avoid duplicate profiles in Woopra, users should identify visitors whenever they provide an email address. To do so, set up tracking to automatically identify visitors by email address using Custom Visitor Data (https://docs.woopra.com/docs/custom-actions-and-visitor-data).\n[block:api-header]\n{\n \"title\": \"Tracking Users Across Multiple Devices\"\n}\n[/block]\nWoopra’s platform is designed to track identified visitors across multiple devices. For example, assume a customer uses the product on their computer, then later accesses it again from their iPad. Most analytics services will count this usage as two different people. Woopra is smart enough to know that this is one visitor and will show all corresponding behavior from both devices under one profile.\n[block:api-header]\n{\n \"title\": \"Behavioral Timeline\"\n}\n[/block]\nThe timeline allows users to visualize a customer's full behavioral history in a single view. The timeline is broken down into two components:\n\n## Histogram Active/Passive\n\nThe histogram at the top of the profile shows a visual overview of customer activity. Hovering over the bars in the Histogram will reveal the date represented by that bar and the number of actions performed by the customer on that day. If the bar is clicked, the date and corresponding actions will be revealed in the vertical list below the Histogram.\n\nYou can also choose to show Active and/or Passive actions only. Active/Passive actions can be adjusted in the [Action Schema](https://docs.woopra.com/docs/configuring-your-schema#action-schema) for that event. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/5924f7b-Image_2020-11-25_at_1.56.52_PM.png\",\n \"Image 2020-11-25 at 1.56.52 PM.png\",\n 1122,\n 478,\n \"#f0f5fc\"\n ],\n \"caption\": \"Woopra Profile Histogram\"\n }\n ]\n}\n[/block]\n## Behavioral Feed\n\nThe Behavioral Feed shows, line by line, every action the customer has performed. This includes every page view and any custom actions that are tracked. A user can analyze a specific action a customer has performed by selecting the \"Actions\" tab at the top of the profile. An aggregated list of every action the customer has taken with be listed. Clicking on the action wished to be analyzed will return a feed of every time the customer has performed this particular action.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/25a5a5b-behavioralfeed.png\",\n \"behavioralfeed.png\",\n 2276,\n 1480,\n \"#f7f8fb\"\n ],\n \"caption\": \"Woopra Profile Feed\"\n }\n ]\n}\n[/block]\n## Custom Data in People Profiles\n\nYou will notice that the example Profile above incorporates [Custom Visitor Data](https://docs.woopra.com/docs/custom-actions-and-visitor-data), such as the customer’s name, and [Custom Action Data](https://docs.woopra.com/docs/custom-actions-and-visitor-data), such as when the customer made a payment. This custom data is formatted with icons and plain language sentences via your [Schema](https://docs.woopra.com/docs/configuring-your-schema) in Woopra. Schema descriptions allow users to customize the way data is displayed and aggregated throughout the platform. Schema descriptions can be customized at any time to tailor Woopra to the business' needs.\n\n##Deleting a Profile\n\nTo delete a profile you can navigate to the profile you wish to delete, then click on the ellipsis (three dots) in the profile. Here you can select to delete a profile. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/996ab0d-Image_2019-03-20_at_4.07.02_PM.png\",\n \"Image 2019-03-20 at 4.07.02 PM.png\",\n 2314,\n 1136,\n \"#fbfcfd\"\n ],\n \"caption\": \"Woopra Anonymous Profile Feed\"\n }\n ]\n}\n[/block]\n##Bulk updating / deleting\n\nIn People Reports, you also have the option to bulk update visitor properties or delete visitors on your current report. \n\nBulk updating will give you the option to bulk update visitor properties such as Title, Name, Email, Company, etc.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/6015f9e-update.gif\",\n \"update.gif\",\n 1195,\n 714,\n \"#f9f8fb\"\n ],\n \"caption\": \"Woopra People Export\"\n }\n ]\n}\n[/block]\nBulk deleting will allow you to bulk delete visitor profiles on your selected report.\n\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/0bdb960-delete.gif\",\n \"delete.gif\",\n 1183,\n 694,\n \"#f8fafb\"\n ],\n \"caption\": \"Woopra Bulk Delete Profiles\"\n }\n ]\n}\n[/block]","excerpt":"","slug":"profiles","type":"basic","title":"People Profiles","__v":0,"parentDoc":null,"updatedAt":"2021-03-18T19:46:00.856Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2020-10-22T19:57:34.081Z","children":[],"childrenPages":[]},{"_id":"5b15d82a5c9a620003d4aae6","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b172556221bfb00033eafea","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-05T00:24:10.906Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":1,"body":"[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/82ffa9c-people_reports_head.png\",\n \"people reports head.png\",\n 2372,\n 1122,\n \"#f9f9fa\"\n ]\n }\n ]\n}\n[/block]\n##Overview\n\nWoopra’s People Reports allow you to quickly generate a view of the people engaging with your brand, across the custom metrics that matter most to you. Segment your report based on properties such as transactional history, recency, at-risk-of-churn, engagement and more. Then, add columns to create a personalized view that can be saved for quick reference and future use throughout the platform.\n\nThese reports allow you to easily answer questions like:\n\n* Who are the people that are highly engaged in my product?\n* Who has recently signed up from a Facebook Marketing campaign and what industry are they in?\n* Who is using our latest product feature and where are they from?\n\n##How to create a People Report\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/ce1314c-people_gif.gif\",\n \"people gif.gif\",\n 1435,\n 673,\n \"#edf2fd\"\n ],\n \"caption\": \"To start a new People Report, click on “People” then “New Report.”\"\n }\n ]\n}\n[/block]\n##Configurations\n\n People Reports are comprised of 3 sections: Timeframe, Performed By, and Columns.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/0423332-people_configure.png\",\n \"people configure.png\",\n 2366,\n 534,\n \"#f2eaf5\"\n ]\n }\n ]\n}\n[/block]\n###Timeframe\nThis is the first metric you should choose. Here, the timeframe is the period in which Woopra will examine all your data of users that did at least 1 action during that time frame. You can choose today, last 7 days, last 30 days, last 90 days, last 365 days or any custom date range of your choice. The default date range is the last 30 days. We choose the last 365 days for this example.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/abffe92-people_report_timeframe.png\",\n \"people report timeframe.png\",\n 880,\n 698,\n \"#f5f5f7\"\n ],\n \"sizing\": \"80\"\n }\n ]\n}\n[/block]\n###Performed By\n\nThink of this step as the segment or group of people you'll be analyzing. Either select an existing segment or create a new one on the fly, by clicking the “+” button in the “Performed By” section of your configuration. More info on how to create a Segment can be found here: [Segments](doc:segments) \n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Timeframe differences\",\n \"body\": \"It is important to understand the Performed by timeframe configuration differs from the Timeframe configuration above. The Performed by timeframe will create a subset population of people from the Timeframe configuration section. \\n\\nFor example, let's take the following scenario -- You want to run a marketing campaign to target users that are currently active and also made a purchase on last year's Black Friday. First, you would set the Timeframe to the current month to select an initial group of ALL users that have performed at least one action in the current month. Next, under the Performed by timeframe, you select the action “purchased item” with the date for last year's Black Friday. Now, you will have a list of all active users from the past month that purchased an item last Black Friday. Typically the Performed by timeframe is less than or equal to the Timeframe configuration range.\\n\\nAlso here's a quick video explanation as well: https://share.getcloudapp.com/E0uzzAvP\"\n}\n[/block]\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/40c1b67-segment_people_gif_1.gif\",\n \"segment people gif (1).gif\",\n 1180,\n 199,\n \"#f2e5f2\"\n ],\n \"caption\": \"Woopra supports nested segmentation filters as well as the ability to combine filters using AND / OR parameters as well. Additionally, you can add a split group to segment by multiple actions or attributes.\"\n }\n ]\n}\n[/block]\n###Columns\n\nHere you will select what columns you want to add to the report. Essentially this is what you want to group the results by. For example, you may want certain information on these users displayed such as emails, names or companies. You could select the properties that are the most relevant and important to your team.\n\n##People Metrics\n\nPeople Metrics allows you to use aggregate functions on tracked actions. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/b0fd785-Image_2021-02-04_at_3.17.30_PM.jpg\",\n \"Image 2021-02-04 at 3.17.30 PM.jpg\",\n 808,\n 994,\n \"#e4ebf7\"\n ]\n }\n ]\n}\n[/block]\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/e9a5504-Image_2019-03-15_at_4.04.22_PM.png\",\n \"Image 2019-03-15 at 4.04.22 PM.png\",\n 834,\n 674,\n \"#e9eff9\"\n ],\n \"caption\": \"For example, if you select Last Touch and the action is 'Play Song,' then I can select either the timestamp when the user last played a song, or I can select a specific property like 'artist' to see the artist of the last song played.\"\n }\n ]\n}\n[/block]\nTo add a People Metric, you can click the plus on the Columns row. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/074a991-Image_2019-03-15_at_4.18.54_PM.png\",\n \"Image 2019-03-15 at 4.18.54 PM.png\",\n 982,\n 100,\n \"#f2b9d9\"\n ],\n \"caption\": \"Selecting “Sum” will count the total times a user has performed that action, within the timeframe selected, and include that sum next to the user. Selecting “Count” will count the total number of times a user has performed that action.\"\n }\n ]\n}\n[/block]\n###List of Operations\n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"Operation\",\n \"h-1\": \"Use\",\n \"0-0\": \"Count\",\n \"1-0\": \"Sum\",\n \"2-0\": \"Count Unique\",\n \"3-0\": \"Last Touch\",\n \"4-0\": \"Top\",\n \"5-0\": \"Mean\",\n \"6-0\": \"Min\",\n \"7-0\": \"Max\",\n \"0-1\": \"Counts the total number of times the selected action occurs.\",\n \"1-1\": \"Sums the total of an action property that is a number.\",\n \"h-2\": \"Example\",\n \"0-2\": \"Count the total number of songs a user played on your site.\",\n \"1-2\": \"Sum the total revenue from a payment made events.\",\n \"2-1\": \"Count the unique number of times a selected action occurs.\",\n \"2-2\": \"Count the unique songs a user played on your site.\",\n \"3-1\": \"Displays the last action property of a specific action.\",\n \"3-2\": \"Show the last article a user viewed on your site.\",\n \"4-1\": \"Displays the top occurrence of a specific action.\",\n \"4-2\": \"Show what feature the user was using the most.\",\n \"5-1\": \"Displays the average out of a set of numbers.\",\n \"5-2\": \"Show the average payment amount a user spends out of their purchase history.\",\n \"6-1\": \"Displays the smallest value of a set of numbers.\",\n \"6-2\": \"Show the smallest order amount the user spent.\",\n \"7-1\": \"Displays the highest value of a set of numbers.\",\n \"7-2\": \"Show the highest amount a user has loaded into their account.\",\n \"8-0\": \"First Touch\",\n \"8-1\": \"Displays the first action property of a specific action within a specified timeframe.\",\n \"8-2\": \"Show the first product a user purchased in the past 2 years.\"\n },\n \"cols\": 3,\n \"rows\": 9\n}\n[/block]\n##Formulas\n\nYou can perform row-based operations by using formulas. Please see our documentation on [Formulas here](https://docs.woopra.com/docs/operations#section-people-reports).\n\n##Exporting and Sharing\n\nNow that you've built your report, you'll want to share it with your team. You can do this by clicking on the 3 dots / ellipsis which will open an options menu for exporting, sharing, tagging, pinning, duplicating and reloading your report. \n\nRemember, reports are not shared with your team by default, so you will need to share it for others to access it. Click share from the menu and select what team you want to share your report with.\n\n###Downloading\n\nYou can download the report in various formats: CSV, CSV (raw), PDF or HTML. Note that CSV (raw) will download some columns, such as average_session_length in total seconds. Exporting the regular CSV for these columns will download timestamps in a string format, e.g. 3 minutes, 21 seconds - 8 minutes, 20 seconds.","excerpt":"","slug":"people-reports","type":"basic","title":"People Reports","__v":0,"parentDoc":null,"updatedAt":"2021-03-13T08:51:09.393Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-02-04T19:16:14.979Z","children":[],"childrenPages":[]}]},{"_id":"5b15d7fa8e08710003061581","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","isAPI":false,"reference":false,"createdAt":"2018-06-05T00:23:22.789Z","from_sync":false,"order":14,"slug":"reports-and-analytics","title":"Analytics","__v":0,"pages":[{"_id":"5c8c2a24cc1fd6001f1c0909","version":"5b070ce4060bee00035d8d12","updatedAt":"2020-06-16T20:11:09.421Z","createdAt":"2019-03-15T22:41:40.797Z","project":"58b721a1f22b830f009a0bcd","category":"5b15d7fa8e08710003061581","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":2,"body":"[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/f418b8e-Image_2019-03-15_at_3.47.44_PM.png\",\n \"Image 2019-03-15 at 3.47.44 PM.png\",\n 2156,\n 718,\n \"#eaecfa\"\n ],\n \"sizing\": \"smart\"\n }\n ]\n}\n[/block]\n\n[block:embed]\n{\n \"html\": \"<iframe class=\\\"embedly-embed\\\" src=\\\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FYDHu5IfHKsA%3Ffeature%3Doembed&url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DYDHu5IfHKsA&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FYDHu5IfHKsA%2Fhqdefault.jpg&key=f2aa6fc3595946d0afc3d76cbbd25dc3&type=text%2Fhtml&schema=youtube\\\" width=\\\"854\\\" height=\\\"480\\\" scrolling=\\\"no\\\" frameborder=\\\"0\\\" allow=\\\"autoplay; fullscreen\\\" allowfullscreen=\\\"true\\\"></iframe>\",\n \"url\": \"https://www.youtube.com/watch?v=YDHu5IfHKsA&feature=youtu.be\",\n \"title\": \"Woopra Journey Report Tutorial\",\n \"favicon\": \"https://s.ytimg.com/yts/img/favicon-vfl8qSV2F.ico\",\n \"image\": \"https://i.ytimg.com/vi/YDHu5IfHKsA/hqdefault.jpg\"\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Checkout our SaaS and eCommerce guides for more example Journey Reports\",\n \"body\": \"[eCommerce Report Examples](doc:ecommerce-report-examples) and [SaaS Report Examples](doc:saas-report-examples)\"\n}\n[/block]\nAt Woopra, our mission has always been to solve what traditional funnels can't. Traditional funnels show a linear path to conversion and rarely allow for the exploration of what attributed to each step. That's where our new Journeys features come in. Journeys allow you to map the end-to-end customer experience to reflect multiple customer touchpoints and dive into what's driving each step.\n\nUsing Journeys, you'll be able to map the touchpoints that adapt to the real-time behavior of your users. This opens up a world of possibility for measuring where and how users convert.\n\nWith Journeys you can:\n\n* Analyze your user's flow and replaces traditional navigation paths.\n* Discover exactly attributes users moving through each step in the customer experience. \n* Identify a user's first or last step before converting.\n\n##How to create a Journey Report\n\n**1: Lay out a plan**\n\nCreating a Journey takes a little forethought. You can break down this into three parts.\n\n1. Select a Focus: This is the most important part of creating your Journey report. What story do you want your Journey report to tell? What questions are you trying to answer? Some examples include:\nAnalyzing the complete customer Journey (from first marketing touch through immersive product usage), a campaign conversion Journey, a product usage Journey, or even a user engagement or churn Journey. \n\n2. Start your Journey: Once you select your focus, select the starting point for your Journey. These can be things like first-time visitors, initiated set up, clicked on a new feature or clicked a paid ad. The initial step marks the beginning of your Journey. \n\n3. List your Required steps: Journeys consist of Required steps and dynamic, footprint steps. Figure out your required steps first and then you can dive deeper into the attribution between these steps.\n\n**2: Building the report**\n\nNow that you have your steps mapped out, you can start building your Journey Report.\n\nTo get started, from the navigation bar click “Analyze,” then “New Report,” and then “Journeys.”\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/ec0a03b-_CreatingnewJourneys.gif\",\n \" CreatingnewJourneys.gif\",\n 1340,\n 750,\n \"#ecf1fc\"\n ]\n }\n ]\n}\n[/block]\n##Configuration\n\nJourney reports are comprised of 4 sections: Timeframe, Performed By, Steps, and Compare by.\n\n##Timeframe\n\nThe timeframe is the period in which Woopra will examine the data of users who performed at least one action. You can choose today, last 7 days, last 30 days, last 90 days, last 365 days or any custom date range. The default date range is the last 30 days. In this example, we've selected the last 90 days.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/2e7eb23-journey_timeframe_1.png\",\n \"journey timeframe (1).png\",\n 945,\n 893,\n \"#f5f5f8\"\n ]\n }\n ]\n}\n[/block]\n##Performed By\n\nThink of this step as the segment or group of people you'll be analyzing. Either select an existing segment or create a new one on the fly, by clicking the “+” button in the “Performed By” section of your configuration. More info on how to create a Segment can be found here: [Segments](doc:segments) \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/cb91eae-Screen_Shot_2018-07-11_at_1.38.06_PM.png\",\n \"Screen Shot 2018-07-11 at 1.38.06 PM.png\",\n 1880,\n 262,\n \"#dfe0ed\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Timeframe DIfferences\",\n \"body\": \"It is important to understand the Performed by timeframe configuration differs from the Timeframe configuration above. The Performed by timeframe will create a subset population of people from the Timeframe configuration section. \\n\\nFor example, let's take the following scenario -- You want to run a marketing campaign to target users that are currently active and also made a purchase on last year's Black Friday. First, you would set the Timeframe to the current month to select an initial group of ALL users that have performed at least one action in the current month. Next, under the Performed by timeframe, you select the action “purchased item” with the date for last year's Black Friday. Now, you will have a list of all active users from the past month that purchased an item last Black Friday. Typically the Performed by timeframe is less than or equal to the Timeframe configuration range.\\n\\nAlso here's a quick video explanation as well: https://share.getcloudapp.com/E0uzzAvP\"\n}\n[/block]\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/7ac827a-segment_people_gif.gif\",\n \"segment people gif.gif\",\n 1180,\n 199,\n \"#f2e5f2\"\n ],\n \"caption\": \"Woopra supports nested segmentation filters as well as the ability to combine filters using AND / OR operators. Additionally, you can add a split a group of actions to segment by multiple actions or attributes.\"\n }\n ]\n}\n[/block]\n##**Steps**\n\nOnce you've defined the timeframe and chosen the behavioral segment you want to analyze, select the steps to include in your journey. Each step is an action or set of actions that users may have done to reach the final step of the journey.\n\nFor example, if you wanted to understand the different touchpoints users go through after logging into your platform, you could add “Login” as Step 1, “Clicked Feature” as Step 2 and so on. \n\n### **Required Steps** \nThese are the steps that users must complete to move onto the next step. They can be goals such as visiting a signup page or performing a certain action. In order to continue through the journey, users must complete the required steps within the report timeframe.\n\n### **Optional Steps** \nBy clicking the icon to the right of the eye, you can make the step optional. This means that a user does not have to go through this step to reach the next goal. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/648dd19-Image_2019-03-15_at_2.37.38_PM.png\",\n \"Image 2019-03-15 at 2.37.38 PM.png\",\n 956,\n 84,\n \"#b0cafe\"\n ],\n \"caption\": \"You can add multiple steps side-by-side leveraging parallel steps. For example, if you want to see users who either became a new paying signup OR submitted a demo request before moving to the next step, you could add a parallel step for comparison.\"\n }\n ]\n}\n[/block]\n### Step configurations\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/19c1f7e-Image_2019-03-15_at_3.03.53_PM.png\",\n \"Image 2019-03-15 at 3.03.53 PM.png\",\n 1176,\n 806,\n \"#eaf1fa\"\n ],\n \"caption\": \"Fixed\"\n }\n ]\n}\n[/block]\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/d17cc5d-Image_2019-03-15_at_3.32.57_PM.png\",\n \"Image 2019-03-15 at 3.32.57 PM.png\",\n 1178,\n 806,\n \"#eaf1fa\"\n ],\n \"caption\": \"Dynamic\"\n }\n ]\n}\n[/block]\n####**Fixed Or Dynamic** - You can either add a fixed step where you define the action and constraints or you can dynamically generate a breakdown of the action. \n* **Fixed** - When choosing fixed, you can add additional fixed steps in parallel. For example, you could define a specific URL as one fixed step, then you can add another URL as another.\n* **Dynamic** - Choosing dynamic will generate a list for you. You can choose how you want to breakdown the list. When the list is generated, it will show you the top 3 actions and will group the rest into \"other.\" For example, if you chose to breakdown by URL, this will show you the top 3 URLs that users visit, followed by the rest in \"other.\"\n####**Select Action** - Select the Action you'd like to analyze. You can also further define the action by adding constraints.\n####**Aggregation** - By default this is aggregated by a count of actions of at least 1. You can change to this count actions, count visits, or by the sum of the action duration. \n####**Time Window:** Once you identify an action for a step, select your time window. The Time Window is essentially the amount of time a user can take to complete a given step from the first step.\n\n###**Compare By** \nFinally, with ‘Compare By’, you can identify the dimension that you want to use to analyze your Journey. These dimensions help you compare the performance of segments to see how they convert through the journey. Woopra offers a number of built-in dimensions out of the box.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/3f7f372-Image_2019-03-15_at_3.40.30_PM.png\",\n \"Image 2019-03-15 at 3.40.30 PM.png\",\n 1048,\n 822,\n \"#f3eef7\"\n ],\n \"caption\": \"Depending on your plan, you may choose from time, demographics, system properties, referrers, campaigns or visitor properties to compare the different dimensions that impact your journey. You can also choose from properties of the first step in the journey. By default, Woopra uses date (Cohort > Days) as the dimension to analyze. Free plans and Core plans are limited to 1 dimension only, which is “compare by days.”\"\n }\n ]\n}\n[/block]\n##Exporting and Sharing\n\nNow that you've built your report, you'll want to share it with your team. You can do this by clicking on the 3 dots / ellipsis which will open an option menu for exporting, sharing, tagging, pinning, duplicating and reloading your report. \n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/9c73d3c-export.png\",\n \"export.png\",\n 586,\n 516,\n \"#fbfbfb\"\n ],\n \"sizing\": \"80\"\n }\n ]\n}\n[/block]\n###**Downloading**\n\nYou can download the report in various formats: CSV, CSV (raw), PDF or HTML. Note that CSV (raw) will download some columns, such as average_session_length in total seconds. Exporting the regular CSV for these columns will download timestamps in a string format, e.g. 3 minutes, 21 seconds - 8 minutes, 20 seconds. \n\n###**Sharing**\n\nRemember, reports are not shared with your team by default. You'll need to share with teams or groups for others to have access. To do so, simply click share from the menu and select the teams you want to share your report with.\n\n###**Snapshots**\n\nSnapshots generate a URL of the report you want to share. You can share this URL with anyone, whether they are apart of Woopra or not. This URL will link to a snapshot of the report you have created. \n\nTo take a snapshot, click the ellipsis and select snapshot. This will copy a URL for you to share. This is a public link, so anyone with the link will have access to that snapshot. This is an easy way to share reports with external teams or anyone whom you want to share the report with. \n\nEditing the report will not change the snapshot, since the snapshot is a view of the report at the time when the snapshot was created.","excerpt":"An introduction to Woopra's Journeys features","slug":"journeys-v3","type":"basic","title":"Journeys","__v":0,"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"children":[],"childrenPages":[]},{"_id":"5b491d8db87d660003dfc9e8","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15d7fa8e08710003061581","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-07-13T21:45:49.967Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":3,"body":"[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/eb6d0e0-unnamed.gif\",\n \"unnamed.gif\",\n 1200,\n 747,\n \"#f5f3f9\"\n ]\n }\n ]\n}\n[/block]\n\n[block:embed]\n{\n \"html\": \"<iframe class=\\\"embedly-embed\\\" src=\\\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Firi5NaJUV0I%3Ffeature%3Doembed&display_name=YouTube&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Diri5NaJUV0I&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Firi5NaJUV0I%2Fhqdefault.jpg&key=f2aa6fc3595946d0afc3d76cbbd25dc3&type=text%2Fhtml&schema=youtube\\\" width=\\\"854\\\" height=\\\"480\\\" scrolling=\\\"no\\\" title=\\\"YouTube embed\\\" frameborder=\\\"0\\\" allow=\\\"autoplay; fullscreen\\\" allowfullscreen=\\\"true\\\"></iframe>\",\n \"url\": \"https://www.youtube.com/watch?v=iri5NaJUV0I&feature=youtu.be\",\n \"title\": \"Trend Report Tutorial\",\n \"favicon\": \"https://www.youtube.com/s/desktop/ce262d3b/img/favicon.ico\",\n \"image\": \"https://i.ytimg.com/vi/iri5NaJUV0I/hqdefault.jpg\"\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Checkout our SaaS and eCommerce guides for more example Trend reports.\",\n \"body\": \"[eCommerce Report Examples](doc:ecommerce-report-examples) and [SaaS Report Examples](doc:saas-report-examples)\"\n}\n[/block]\n##Overview\n\nTrends Reports allow you to visualize patterns or movements in your data over time that would be difficult to measure in a Journey or Retention Report. What's really powerful about Trends is that users can define any combination of user segments and dimensions on the fly. Right off the bat, Trends can help you answer the most complicated questions with a few clicks by leveraging custom events(link) and segments(link). \n\nWoopra’s Trends reports can help you explore several dimensions in your data that may not have been recognizable at first. Woopra gives you the flexibility to effortlessly analyze any combination of customer segments, behaviors and actions that affect your product usage over time.\n\n##How to create a Trends Report\n### Identify The Focus\n\nYou will need to ask three main questions:\n\n1. Who are you tracking? Meaning, what group or segment (link) of people do you want to include in this report?\n2. What actions do you want to analyze over time?\n3. How do you want to group or compare these results?\n\n### Build the Report\n\nNow that you know what you want your report to focus on, we can start building the report. \n\n##Configurations\n\nTrends Reports are comprised of 6 sections: Timeframe, Performed By, Analyze, Interval, Compare By, and Measure By.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/7cb1dbb-Image_2020-03-25_at_1.29.01_PM.png\",\n \"Image 2020-03-25 at 1.29.01 PM.png\",\n 2708,\n 1162,\n \"#f8f8fa\"\n ]\n }\n ]\n}\n[/block]\n###Timeframe\nThis is the first metric you should choose. Here, the timeframe is the period in which Woopra will examine all your data of users that did at least 1 action during that time frame. You can choose a relative date such as today, last 7 days, last 30 days, last 90 days, last 365 days or any absolute date range of your choice. The default date range is the last 30 days. We choose the last 365 days for this example.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/0ef3a27-Image_2020-03-25_at_1.31.23_PM.png\",\n \"Image 2020-03-25 at 1.31.23 PM.png\",\n 1566,\n 786,\n \"#f6f3f8\"\n ],\n \"sizing\": \"80\"\n }\n ]\n}\n[/block]\n###Compare to the Previous Timeframe\nNext to the Timeframe is where you can select the comparison to compare the results of the chart to a previous period. Here you can select and absolute or relative timeframe as your comparison. If you selected the timeframe as May 1st to May 31st and select 'previous day', the displayed report will show a comparison of the previous day for each day on the chart. For example, on May 2nd will show you the comparison to May 1st. \n\nIf you selected 'previous month', the overlay will be a comparison of the previous month. Here, we're selecting the “end date” of the previous range we’re comparing. So if comparing May 1st to May 31st, selecting 'previous month', the last date comparison will be the end of April compared to the end of May (see picture below). \n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/dc793f5-Image_2020-03-25_at_2.15.05_PM.png\",\n \"Image 2020-03-25 at 2.15.05 PM.png\",\n 2644,\n 1236,\n \"#f1f3f6\"\n ]\n }\n ]\n}\n[/block]\n###Performed By\n\nThink of this step as the segment or group of people you'll be analyzing. Either select an existing segment or create a new one on the fly, by clicking the “+” button in the “Performed By” section of your configuration. More info on how to create a Segment can be found here: [Segments](doc:segments) \n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Timeframe differences\",\n \"body\": \"It is important to understand the Performed by timeframe configuration differs from the Timeframe configuration above. The Performed by timeframe will create a subset population of people from the Timeframe configuration section. \\n\\nFor example, let's take the following scenario -- You want to run a marketing campaign to target users that are currently active and also made a purchase on last year's Black Friday. First, you would set the Timeframe to the current month to select an initial group of ALL users that have performed at least one action in the current month. Next, under the Performed by timeframe, you select the action “purchased item” with the date for last year's Black Friday. Now, you will have a list of all active users from the past month that purchased an item last Black Friday. Typically the Performed by timeframe is less than or equal to the Timeframe configuration range.\\n\\nAlso here's a quick video explanation as well: https://share.getcloudapp.com/E0uzzAvP\"\n}\n[/block]\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/40c1b67-segment_people_gif_1.gif\",\n \"segment people gif (1).gif\",\n 1180,\n 199,\n \"#f2e5f2\"\n ],\n \"caption\": \"Woopra supports nested segmentation filters as well as the ability to combine filters using AND / OR parameters. Additionally, you can add a split group to segment by multiple actions or attributes.\"\n }\n ]\n}\n[/block]\n###Analyze\n\nThese are the actions you would like to analyze over time. With our most recent release, we have enabled the analysis of multiple actions in Trends. To add multiple actions, you can click the '+' button next to the action\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/c48acab-Image_2020-10-19_at_3.56.47_PM.png\",\n \"Image 2020-10-19 at 3.56.47 PM.png\",\n 1134,\n 532,\n \"#e4e5f0\"\n ]\n }\n ]\n}\n[/block]\n###Interval\nThis is the time interval for the chart. This can be by hour, day, week, or month.\n\n###Compare by\n\nThese are the dimensions you want to analyze and compare. These can be comprised of multiple dimensions that we can group by. Being able to compare any of these properties alongside each other is what makes Woopra’s Trends an extremely powerful feature to analyze customer behavior.\n\nThe properties will be determined by the actions you select. For example, if you selected to analyze a pageview event, you might see properties like URL, Title, Domain, etc. \n\n###Measured By \nThis tells Woopra the metrics you want to analyze. By default, this field includes People, Visits, and Actions.\n\n* ‘People’ is the count of unique ids of people who performed the action you want to analyze\n* Visits’ is the number of times this unique group of people visited your web or mobile app and performed the action you want to analyze (request a report, in this example) during the specified timeframe\n* ‘Actions’ is the number of times this unique group of people performed the action you want to analyze (request a report, in this example) during the specified timeframe.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/a34e75a-Image_2020-10-19_at_3.59.23_PM.png\",\n \"Image 2020-10-19 at 3.59.23 PM.png\",\n 1118,\n 1144,\n \"#e1eaf7\"\n ],\n \"caption\": \"You can also add constraints to measures. For example, to show a count of users who did a specific action, you can define what is included in the count totals.\"\n }\n ]\n}\n[/block]\n###Chart Metrics\nThe upper left of the report will show a total number of People, Actions, and Visits for the selected time period. \n\nYou can change the visualization of the report to a bar, line, or spline chart. You can also change whether the chart type is stacked or not. Lastly, you can hide the comparison from the chart as well. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/ee44bc9-Screen_Recording_2020-03-25_at_01.47_PM.gif\",\n \"Screen Recording 2020-03-25 at 01.47 PM.gif\",\n 1342,\n 628,\n \"#f5f4fa\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n##Formulas\n\nYou can perform row-based operations by using formulas. For example, if you wanted to find the average session length, you could add a formula row that divides the session length by the number of sessions (visits). \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/43f19b6-Image_2020-10-19_at_4.05.56_PM.png\",\n \"Image 2020-10-19 at 4.05.56 PM.png\",\n 2436,\n 1948,\n \"#f4f4fa\"\n ],\n \"caption\": \"Average Session Length Calculation\"\n }\n ]\n}\n[/block]\nFor more info, see our documentation on [Formulas here](https://docs.woopra.com/docs/operations#section-trend-reports)\n\n###Comparing Rows\n\nYou can select rows that you want to compare by in the visualization by clicking the checkbox next to the row and re-running the report. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/3970ac5-Screen_Recording_2020-03-25_at_02.19_PM.gif\",\n \"Screen Recording 2020-03-25 at 02.19 PM.gif\",\n 1353,\n 1041,\n \"#f0f5fc\"\n ]\n }\n ]\n}\n[/block]\nToggle \"Others\" view by clicking on others. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/2f203a9-Screen_Recording_2021-06-11_at_05.21.28_PM.gif\",\n \"Screen Recording 2021-06-11 at 05.21.28 PM.gif\",\n 1045,\n 977,\n \"#eceef7\"\n ]\n }\n ]\n}\n[/block]\n##Exporting and Sharing\n\nNow that you've built your report, you'll want to share it with your team. You can do this by clicking on the 3 dots / ellipsis which will open an options menu for exporting, sharing, tagging, pinning, duplicating and reloading your report. \n\n###Downloading\n\nYou can download the report in various formats: CSV, CSV (raw), PDF or HTML. Note that CSV (raw) will download some columns, such as average_session_length in total seconds. Exporting the regular CSV for these columns will download timestamps in a string format, e.g. 3 minutes, 21 seconds - 8 minutes, 20 seconds. \n\n##Sharing\n\nRemember, reports are not shared with your team by default, so you will need to share it for others to access it. Click share from the menu and select what team you want to share your report with.\n\n###Snapshots\n\nSnapshots generate a URL of the report you want to share. You can share this URL with anyone, whether they are apart of Woopra or not. This URL will link to a snapshot of the report you have created. \n\nTo take a snapshot, click the ellipsis and select snapshot. This will copy a URL for you to share. This is a public link, so anyone with the link will have access to that snapshot. This is an easy way to share reports with external teams or anyone whom you want to share the report with. \n\nEditing the report will not change the snapshot, since the snapshot is a view of the report at the time when the snapshot was created.","excerpt":"","slug":"trends","type":"basic","title":"Trends","__v":0,"parentDoc":null,"updatedAt":"2022-04-27T20:57:53.726Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2020-10-19T19:13:17.273Z","deprecated":false,"children":[],"childrenPages":[]},{"_id":"5b49233bb87d660003dfca0b","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15d7fa8e08710003061581","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-07-13T22:10:03.748Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":4,"body":"[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/6226b40-retension_report_head.png\",\n \"retension report head.png\",\n 2366,\n 1142,\n \"#f9fbfc\"\n ]\n }\n ]\n}\n[/block]\n##Overview\n\nRetention Analytics allow you to investigate the activity of your visitors over time by illustrating how long visitors continue to get value out of your product. Reports lay out how many of your visitors who complete an initial action continue to return and complete an important subsequent action over time. An action could be something as simple as return visits to your site or something as complex as opening your weekly promotional emails from MailChimp.\n\nPut simply, Retention Analytics allows you to understand:\n\n* For how long do my customers who did X keep coming back to do Y?\n* Cohort analysis. \n\n##Retention Report Structure\n\nA Retention Analytics report is structured in 2 parts:\n\n1. The top chart aggregates all of the cohorts together, showing you the overall (average) retention rate of your visitors within a range of dates.\n2. The lower table displays the retention of individual cohorts independently to monitor any changes in retention rates over time within your date range.\n\n##How to create a Retention Report\n\nTo start a new Retention Report click “Analyze”, then “New Report” then “Retention Report.”\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/ba5b581-retenstion_gif.gif\",\n \"retenstion gif.gif\",\n 1436,\n 669,\n \"#edf2fd\"\n ]\n }\n ]\n}\n[/block]\n##Configurations\n\nRetention Reports are comprised of 5 sections: Timeframe, Performed By, Initial Action, Repeat Action, and Time Unit.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/86af826-retention_config.png\",\n \"retention config.png\",\n 2354,\n 648,\n \"#fbfcfd\"\n ]\n }\n ]\n}\n[/block]\n###Timeframe\nThis is the first metric you should choose. Here, the timeframe is the period in which Woopra will examine all your data of users that did at least 1 action during that time frame. You can choose today, last 7 days, last 30 days, last 90 days, last 365 days or any custom date range of your choice. The default date range is the last 30 days. We choose the last 365 days for this example.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/abffe92-people_report_timeframe.png\",\n \"people report timeframe.png\",\n 880,\n 698,\n \"#f5f5f7\"\n ],\n \"sizing\": \"80\"\n }\n ]\n}\n[/block]\n###Performed By\n\nThink of this step as the segment or group of people you'll be analyzing. Either select an existing segment or create a new one on the fly, by clicking the “+” button in the “Performed By” section of your configuration. More info on how to create a Segment can be found here: [Segments](doc:segments) \n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Timeframe Differences\",\n \"body\": \"It is important to understand the Performed by timeframe configuration differs from the Timeframe configuration above. The Performed by timeframe will create a subset population of people from the Timeframe configuration section. \\n\\nFor example, let's take the following scenario -- You want to run a marketing campaign to target users that are currently active and also made a purchase on last year's Black Friday. First, you would set the Timeframe to the current month to select an initial group of ALL users that have performed at least one action in the current month. Next, under the Performed by timeframe, you select the action “purchased item” with the date for last year's Black Friday. Now, you will have a list of all active users from the past month that purchased an item last Black Friday. Typically the Performed by timeframe is less than or equal to the Timeframe configuration range.\\n\\nAlso here's a quick video explanation as well: https://share.getcloudapp.com/E0uzzAvP\"\n}\n[/block]\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/40c1b67-segment_people_gif_1.gif\",\n \"segment people gif (1).gif\",\n 1180,\n 199,\n \"#f2e5f2\"\n ],\n \"caption\": \"Woopra supports nested segmentation filters as well as the ability to combine filters using AND / OR parameters. Additionally, you can add a split group to segment by multiple actions or attributes.\"\n }\n ]\n}\n[/block]\n###Initial Action\n\nHere you will select what the action is that you want to track for the cohort.\n\n###Repeat Action\n\nThis is an event that demonstrates user engagement with your product (this might be a customer starting a meeting, creating a report, sending an email, or simply returning to your website etc).\n\n###Time Unit\n\nThis is the amount of time you want to track after the initial event. You can choose N amount of days, weeks or months later. \n\n##Exporting and Sharing\n\nNow that you've built your report, you'll want to share it with your team. You can do this by clicking on the 3 dots / ellipsis which will open an options menu for exporting, sharing, tagging, pinning, duplicating and reloading your report. \n\n###Downloading\n\nYou can download the report in various formats: CSV, CSV (raw), PDF or HTML. Note that CSV (raw) will download some columns, such as average_session_length in total seconds. Exporting the regular CSV for these columns will download timestamps in a string format, e.g. 3 minutes, 21 seconds - 8 minutes, 20 seconds. \n\n##Sharing\n\nRemember, reports are not shared with your team by default, so you will need to share it for others to access it. Click share from the menu and select what team you want to share your report with.\n\n###Snapshots\n\nSnapshots generate a URL of the report you want to share. You can share this URL with anyone, whether they are apart of Woopra or not. This URL will link to a snapshot of the report you have created. \n\nTo take a snapshot, click the ellipsis and select snapshot. This will copy a URL for you to share. This is a public link, so anyone with the link will have access to that snapshot. This is an easy way to share reports with external teams or anyone whom you want to share the report with. \n\nEditing the report will not change the snapshot, since the snapshot is a view of the report at the time when the snapshot was created.","excerpt":"","slug":"retention","type":"basic","title":"Retention","__v":0,"parentDoc":null,"updatedAt":"2020-06-16T20:11:44.476Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"children":[],"childrenPages":[]},{"_id":"5c0862f1e54bf70062f9e130","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15d7fa8e08710003061581","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-12-05T23:44:49.777Z","link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":5,"body":"[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/986a8de-1_pKxr-qmrQMQQm4x5YQmLYQ.png\",\n \"1_pKxr-qmrQMQQm4x5YQmLYQ.png\",\n 1600,\n 1007,\n \"#f7f7f9\"\n ]\n }\n ]\n}\n[/block]\n\n[block:embed]\n{\n \"html\": \"<iframe class=\\\"embedly-embed\\\" src=\\\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FOmo7XxYWv_w%3Ffeature%3Doembed&url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DOmo7XxYWv_w&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FOmo7XxYWv_w%2Fhqdefault.jpg&key=f2aa6fc3595946d0afc3d76cbbd25dc3&type=text%2Fhtml&schema=youtube\\\" width=\\\"854\\\" height=\\\"480\\\" scrolling=\\\"no\\\" frameborder=\\\"0\\\" allow=\\\"autoplay; fullscreen\\\" allowfullscreen=\\\"true\\\"></iframe>\",\n \"url\": \"https://www.youtube.com/watch?v=Omo7XxYWv_w&t\",\n \"title\": \"Introducing our new Cohort Reports\",\n \"favicon\": \"https://s.ytimg.com/yts/img/favicon-vfl8qSV2F.ico\",\n \"image\": \"https://i.ytimg.com/vi/Omo7XxYWv_w/hqdefault.jpg\"\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"[eCommerce Report Examples](doc:ecommerce-report-examples) and [SaaS Report Examples](doc:saas-report-examples)\",\n \"title\": \"Checkout our SaaS and eCommerce guides for more example Cohort reports.\"\n}\n[/block]\n##Overview\n\nCohort Analysis allows you to measure the performance of cohorts, those who share common behaviors, over time. By breaking up your users into cohorts, you can understand how different activities across the organization impact specific cohorts throughout their lifecycle.\n\nTeams across the organization can use Woopra’s Cohort Analytics to measure product engagement, marketing campaign efficiency, revenue trends, sales retention and more to increase customer health and stickiness over time.\n\n##Cohort Report Structure\n\nA Cohort Analysis report is structured in 2 parts:\n\n1. The top chart aggregates all of the cohorts together, showing you the overall (average) retention rate of your visitors within a range of dates.\n2. The lower table displays the retention of individual cohorts independently to monitor any changes in retention rates over time within your date range.\n\n##How to create a Cohort Analysis Report\n\nTo start a new Cohort Analysis Report click “Analyze”, then “New Report” then “Cohort Report.”\n\n##Configurations\n\nCohort Reports are comprised of 5 sections: Timeframe, Performed By, Initial Action, Repeat Action, and Time Unit.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/83e9513-Image_2018-12-05_at_4.09.35_PM.png\",\n \"Image 2018-12-05 at 4.09.35 PM.png\",\n 2352,\n 838,\n \"#fbfcfd\"\n ]\n }\n ]\n}\n[/block]\n###Timeframe\nThis is the first metric you should choose. Here, the timeframe is the period in which Woopra will examine all your data of users that did at least 1 action during that time frame. You can choose today, last 7 days, last 30 days, last 90 days, last 365 days or any custom date range of your choice. The default date range is the last 30 days. We choose the last 365 days for this example.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/abffe92-people_report_timeframe.png\",\n \"people report timeframe.png\",\n 880,\n 698,\n \"#f5f5f7\"\n ],\n \"sizing\": \"80\"\n }\n ]\n}\n[/block]\n###Performed By\n\nThink of this step as the segment or group of people you'll be analyzing. Either select an existing segment or create a new one on the fly, by clicking the “+” button in the “Performed By” section of your configuration. More info on how to create a Segment can be found here: [Segments](doc:segments) \n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Timeframe Differences\",\n \"body\": \"It is important to understand the Performed by timeframe configuration differs from the Timeframe configuration above. The Performed by timeframe will create a subset population of people from the Timeframe configuration section. \\n\\nFor example, let's take the following scenario -- You want to run a marketing campaign to target users that are currently active and also made a purchase on last year's Black Friday. First, you would set the Timeframe to the current month to select an initial group of ALL users that have performed at least one action in the current month. Next, under the Performed by timeframe, you select the action “purchased item” with the date for last year's Black Friday. Now, you will have a list of all active users from the past month that purchased an item last Black Friday. Typically the Performed by timeframe is less than or equal to the Timeframe configuration range.\\n\\nAlso here's a quick video explanation as well: https://share.getcloudapp.com/E0uzzAvP\"\n}\n[/block]\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/40c1b67-segment_people_gif_1.gif\",\n \"segment people gif (1).gif\",\n 1180,\n 199,\n \"#f2e5f2\"\n ],\n \"caption\": \"Woopra supports nested segmentation filters as well as the ability to combine filters using AND / OR parameters. Additionally, you can add a split group to segment by multiple actions or attributes.\"\n }\n ]\n}\n[/block]\n###Initial Action\n\nHere you will select what the action is that you want to track for the cohort.\n\n###Repeat Action\n\nThis is an event that demonstrates user engagement with your product (this might be a customer starting a meeting, making a payment, creating a report, sending an email, or simply returning to your website etc).\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/8f9b2df-Image_2018-12-05_at_4.17.14_PM.png\",\n \"Image 2018-12-05 at 4.17.14 PM.png\",\n 1260,\n 762,\n \"#f4f4fa\"\n ],\n \"caption\": \"The dropdown next to the event will allow you to select the metric you want to analyze for the selected repeat action. This can change depending on your *Repeat Action* selection. For example, you can select to analyze the report based on the number of People, Visits, or Actions. Although, if you select your repeat action as a \\\"Payment\\\" event, you may also see that you can select \\\"Actions\\\" like sum of subtotal, sum of total, and sum of discounts.\"\n }\n ]\n}\n[/block]\n###Time Unit\n\nThis is the amount of time you want to track after the initial event. You can choose N amount of days, weeks or months later. \n\n###Others\n\nYou can click the checkbox to disregard the initial timeframe and initial actions and include all people who performed the repeat action for all time.\n\n##Exporting and Sharing\n\nNow that you've built your report, you'll want to share it with your team. You can do this by clicking on the 3 dots / ellipsis which will open an options menu for exporting, sharing, tagging, pinning, duplicating and reloading your report. \n\n###Downloading\n\nYou can download the report in various formats: CSV, CSV (raw), PDF or HTML. Note that CSV (raw) will download some columns, such as average_session_length in total seconds. Exporting the regular CSV for these columns will download timestamps in a string format, e.g. 3 minutes, 21 seconds - 8 minutes, 20 seconds. \n\n##Sharing\n\nRemember, reports are not shared with your team by default, so you will need to share it for others to access it. Click share from the menu and select what team you want to share your report with.\n\n###Snapshots\n\nSnapshots generate a URL of the report you want to share. You can share this URL with anyone, whether they are apart of Woopra or not. This URL will link to a snapshot of the report you have created. \n\nTo take a snapshot, click the ellipsis and select snapshot. This will copy a URL for you to share. This is a public link, so anyone with the link will have access to that snapshot. This is an easy way to share reports with external teams or anyone whom you want to share the report with. \n\nEditing the report will not change the snapshot, since the snapshot is a view of the report at the time when the snapshot was created.","excerpt":"","slug":"cohort","type":"basic","title":"Cohort","__v":0,"parentDoc":null,"updatedAt":"2020-06-16T20:12:01.480Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"children":[],"childrenPages":[]},{"_id":"5d2e25ca9a3dee004a388320","version":"5b070ce4060bee00035d8d12","updatedAt":"2020-07-08T18:44:35.112Z","createdAt":"2019-07-16T19:30:18.714Z","project":"58b721a1f22b830f009a0bcd","category":"5b15d7fa8e08710003061581","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":6,"body":"[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/a9dc958-Image_2019-07-16_at_12.25.48_PM.png\",\n \"Image 2019-07-16 at 12.25.48 PM.png\",\n 2370,\n 370,\n \"#f2f5fa\"\n ],\n \"sizing\": \"smart\"\n }\n ]\n}\n[/block]\n\n[block:embed]\n{\n \"html\": \"<iframe class=\\\"embedly-embed\\\" src=\\\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FqVFVW-FBy9c%3Ffeature%3Doembed&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DqVFVW-FBy9c&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FqVFVW-FBy9c%2Fhqdefault.jpg&key=f2aa6fc3595946d0afc3d76cbbd25dc3&type=text%2Fhtml&schema=youtube\\\" width=\\\"854\\\" height=\\\"480\\\" scrolling=\\\"no\\\" frameborder=\\\"0\\\" allow=\\\"autoplay; fullscreen\\\" allowfullscreen=\\\"true\\\"></iframe>\",\n \"url\": \"https://www.youtube.com/watch?v=qVFVW-FBy9c&feature=youtu.be\",\n \"title\": \"Attribution Report Tutorial\",\n \"favicon\": \"https://s.ytimg.com/yts/img/favicon-vfl8qSV2F.ico\",\n \"image\": \"https://i.ytimg.com/vi/qVFVW-FBy9c/hqdefault.jpg\"\n}\n[/block]\nOne important aspect of understanding your traffic is knowing what drives conversions. While [Journeys](doc:journeys-v3) are great to understand the paths that users take, you may need a different approach to understanding what attributing factors are driving conversions. \n\nThis is where our Attribution reports come in. With this report, you can quantify the effectiveness of various touchpoints or campaigns that lead to conversions.\n\n##Configuration\n\nAttribution reports are comprised of 6 sections: Timeframe, Performed By, Initial Action, Touchpoints, and Conversions\n\n##Timeframe\n\nThe timeframe is the period in which Woopra will examine the data of users who performed at least one action. You can choose today, last 7 days, last 30 days, last 90 days, last 365 days or any custom date range. The default date range is the last 30 days. In this example, we've selected the last 90 days.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/2e7eb23-journey_timeframe_1.png\",\n \"journey timeframe (1).png\",\n 945,\n 893,\n \"#f5f5f8\"\n ]\n }\n ]\n}\n[/block]\n##Performed By\n\nThink of this step as the segment or group of people you'll be analyzing. Either select an existing segment or create a new one on the fly, by clicking the “+” button in the “Performed By” section of your configuration. More info on how to create a Segment can be found here: [Segments](doc:segments) \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/cb91eae-Screen_Shot_2018-07-11_at_1.38.06_PM.png\",\n \"Screen Shot 2018-07-11 at 1.38.06 PM.png\",\n 1880,\n 262,\n \"#dfe0ed\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Timeframe differences\",\n \"body\": \"It is important to understand the Performed by timeframe configuration differs from the Timeframe configuration above. The Performed by timeframe will create a subset population of people from the Timeframe configuration section. \\n\\nFor example, let's take the following scenario -- You want to run a marketing campaign to target users that are currently active and also made a purchase on last year's Black Friday. First, you would set the Timeframe to the current month to select an initial group of ALL users that have performed at least one action in the current month. Next, under the Performed by timeframe, you select the action “purchased item” with the date for last year's Black Friday. Now, you will have a list of all active users from the past month that purchased an item last Black Friday. Typically the Performed by timeframe is less than or equal to the Timeframe configuration range.\\n\\nAlso here's a quick video explanation as well: https://share.getcloudapp.com/E0uzzAvP\"\n}\n[/block]\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/7ac827a-segment_people_gif.gif\",\n \"segment people gif.gif\",\n 1180,\n 199,\n \"#f2e5f2\"\n ],\n \"caption\": \"Woopra supports nested segmentation filters as well as the ability to combine filters using AND / OR operators. Additionally, you can add a split a group of actions to segment by multiple actions or attributes.\"\n }\n ]\n}\n[/block]\n##Initial Action\n\nHere you will select the first action (or starting point) where you want the attribution analysis to begin within the selected timeframe. \n\nFor example, if you ran an email campaign that linked users to your pricing page, you could use this as your initial action to analyze. You would select a pageview event where the URL contains 'pricing'.\n\n## Touchpoints\nThese are the specific attribution events that you want to analyze. You can have multiple touchpoints that you want to analyze and you can give weight to the touches by changing the [Attribution Model](https://docs.woopra.com/docs/attribution#section--model-).\n\nExpanding on the scenario above, say we ran multiple different campaigns that brought people to our pricing page. Assuming you used [UTM tags](doc:campaign-tracking) in your links, we can analyze which campaigns are driving the most conversions.\n\nIn this example, we could select a page view event where campaign name = exists. \n\n###Dimension\nThe dimension is how you want the report broken down. For example, if you select ‘Campaign Name’ as the dimension, this will show you an analysis of all the various campaign names in the end report. \n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/dfc98af-Image_2019-07-17_at_1.36.53_PM.png\",\n \"Image 2019-07-17 at 1.36.53 PM.png\",\n 792,\n 724,\n \"#e5ecf7\"\n ]\n }\n ]\n}\n[/block]\n## Conversion\nThis is the conversion action that you want to analyze. This could be things like submitting a form, making a payment, registering for an account, and so on. \n\nDepending on what you select, the report will reflect counts or sums. If you select count of an action, this will display an attribution count based on the [Attribution Model](https://docs.woopra.com/docs/attribution#section--model-) you select. If you select a sum, this will attribute a dollar amount to the conversion. \n\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/8a37407-Image_2019-07-17_at_5.41.41_PM.png\",\n \"Image 2019-07-17 at 5.41.41 PM.png\",\n 748,\n 680,\n \"#e0e8f6\"\n ],\n \"caption\": \"\"\n }\n ]\n}\n[/block]\n## Model\nThis is where you can select the Attribution model that you want to use. \n### First Touch\nThe first touch receives 100% of the credit for the conversion.\n### Last Touch\nThe last touch receives 100% of the credit for the conversion.\n### Decay\nTouches closer to the conversion in time receive the most credit. When selecting Decay, you can enter the decay rate in seconds, minutes, hours, days, weeks or months. \n\nFor example, if you chose a decay rate of 2 hours, the touchpoints within these 2 hours will receive more credit than events that happen outside this time window.\n### Linear\nCredit is distributed evenly across all touches. If you have 4 different touchpoints, then credit will be distributed with each having 25% of the credit. \n### Multi-Touch\nDefine the percentage of credit that the first and last touches will receive. The remaining credit is distributed evenly across the remaining touches.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/7843405-Image_2019-07-22_at_1.34.29_PM.png\",\n \"Image 2019-07-22 at 1.34.29 PM.png\",\n 1930,\n 1736,\n \"#f4f2f5\"\n ],\n \"caption\": \"Our final report. We can see in this report that Adwords was the highest performing campaign channel resulting in 92 people converting with 93 conversions (people can convert more than once). If the conversion event was a sum of payments, the attribution would be a total amount attributed to each touch.\",\n \"sizing\": \"full\"\n }\n ]\n}\n[/block]\n##Exporting and Sharing\nNow that you've built your report, you'll want to share it with your team. You can do this by clicking on the 3 dots / ellipsis which will open an option menu for exporting, sharing, tagging, pinning, duplicating and reloading your report. \n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/9c73d3c-export.png\",\n \"export.png\",\n 586,\n 516,\n \"#fbfbfb\"\n ],\n \"sizing\": \"80\"\n }\n ]\n}\n[/block]\n###**Downloading**\n\nYou can download the report in various formats: CSV, CSV (raw), PDF or HTML. Note that CSV (raw) will download some columns, such as average_session_length in total seconds. Exporting the regular CSV for these columns will download timestamps in a string format, e.g. 3 minutes, 21 seconds - 8 minutes, 20 seconds. \n\n###**Sharing**\n\nRemember, reports are not shared with your team by default. You'll need to share with teams or groups for others to have access. To do so, simply click share from the menu and select the teams you want to share your report with.\n\n###**Snapshots**\n\nSnapshots generate a URL of the report you want to share. You can share this URL with anyone, whether they are apart of Woopra or not. This URL will link to a snapshot of the report you have created. \n\nTo take a snapshot, click the ellipsis and select snapshot. This will copy a URL for you to share. This is a public link, so anyone with the link will have access to that snapshot. This is an easy way to share reports with external teams or anyone whom you want to share the report with. \n\nEditing the report will not change the snapshot, since the snapshot is a view of the report at the time when the snapshot was created.","excerpt":"An introduction to Woopra's Attribution features","slug":"attribution","type":"basic","title":"Attribution","__v":0,"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"children":[],"childrenPages":[]},{"_id":"5ec5af400b2d1e006ffa651b","metadata":{"image":[],"title":"","description":""},"api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"next":{"description":"","pages":[]},"title":"Drilldown Reporting","updates":[],"type":"basic","slug":"drilldown-reporting","excerpt":"","body":"When creating various reports, you can drill down or filter on various data points in your reports. You can drill down to any report from Journeys, Trends, People, and Retention Reports. \n\n#Drilldown Reports\n###Journey to Trends Example\nYou can click on a data point in the Journey and drill down to a new report. We can choose from any of our existing reports. Here, we're drilling down to a Trends Report on the 61 people that completed step 3 in our Journey. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/c2d53de-Image_2020-05-20_at_5.39.36_PM.png\",\n \"Image 2020-05-20 at 5.39.36 PM.png\",\n 2864,\n 2126,\n \"#f5f1f4\"\n ]\n }\n ]\n}\n[/block]\nAfter you drill down to the new Trend Report, the new report is segmented on those 61 people. We can also edit the Trend Report by adding additional \"Compare By\" filters to breakdown the data even further. \n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/0df5b0a-Image_2020-05-20_at_5.41.47_PM.png\",\n \"Image 2020-05-20 at 5.41.47 PM.png\",\n 2722,\n 2564,\n \"#f8f7fa\"\n ]\n }\n ]\n}\n[/block]\n#Filtering Reports\nInstead of drilling down to a new report, we can also filter the current report based on the data point. Let's take a look at that same Journey Report.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/f423ea4-Image_2020-05-20_at_5.44.29_PM.png\",\n \"Image 2020-05-20 at 5.44.29 PM.png\",\n 2594,\n 2416,\n \"#f3eff2\"\n ]\n }\n ]\n}\n[/block]\nAs you can see, we have 61 people who \"ran a report\" in step 3 in our Journey. Now I can filter this same report based on those 61 people.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/8510573-Image_2020-05-20_at_5.45.57_PM.png\",\n \"Image 2020-05-20 at 5.45.57 PM.png\",\n 912,\n 1112,\n \"#f2ebee\"\n ]\n }\n ]\n}\n[/block]\nOnce you filter the report, you can now see that step 3 in the Journey has a 100% conversion. The report is now being filtered by the 61 people from that step. Essentially, those 61 people are now being used as a segment (or Performed By) filter.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/b31faa0-Image_2020-05-20_at_5.50.32_PM.png\",\n \"Image 2020-05-20 at 5.50.32 PM.png\",\n 2548,\n 2314,\n \"#f3f2f4\"\n ]\n }\n ]\n}\n[/block]\nThese are just a few examples of the possibilities with drilldown reporting. Try experimenting to find deeper insight into your data!","order":8,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"pendingAlgoliaPublish":false,"createdAt":"2020-05-20T01:14:38.744Z","updatedAt":"2020-05-21T01:39:41.669Z","user":"5adfa297452bd900036d0f67","category":"5b15d7fa8e08710003061581","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","__v":0,"parentDoc":null,"children":[],"childrenPages":[]},{"_id":"6081e9f11c5dc20066087dd7","metadata":{"image":[],"title":"","description":""},"api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"next":{"description":"","pages":[]},"title":"Annotations","updates":[],"type":"basic","slug":"annotations","excerpt":"Use Annotations to tag important milestones and events to understand which initiatives are driving the most growth.","body":"[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/a351443-Image_2021-04-22_at_2.27.45_PM.jpg\",\n \"Image 2021-04-22 at 2.27.45 PM.jpg\",\n 2368,\n 1118,\n \"#f4f5f7\"\n ]\n }\n ]\n}\n[/block]\nAnnotations can help record and tag different events to clearly see what impact they had on conversions, growth, and engagement. You can add any important event such as a new feature launch, the start of a campaign, the beginning and end of financial quarters, and much more! Once you create Annotations, you can clearly see them marked in [Trend Reports](doc:trends) and also use them in your Timeframe sections. \n\n#How to add Annotations\nNavigate to the Configure section and click on Annotations on the left. From there, you can enter the title and description of the Annotation, as well as the event date. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/7ebf59a-Image_2021-04-22_at_2.55.10_PM.png\",\n \"Image 2021-04-22 at 2.55.10 PM.png\",\n 2382,\n 680,\n \"#f3f4f6\"\n ]\n }\n ]\n}\n[/block]\nNext, you can select the Annotation Group. This is to organize your Annotations into categories. For example, you could have a Marketing Campaign group or a Feature Release group. \n\nTo create a new group, click on the dropdown and select \"Manage Annotation Groups.\"\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/630c5d5-Image_2021-04-22_at_2.36.49_PM.jpg\",\n \"Image 2021-04-22 at 2.36.49 PM.jpg\",\n 1204,\n 746,\n \"#e8eaf6\"\n ]\n }\n ]\n}\n[/block]\nAfter selecting, you can create a new group. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/298d492-Image_2021-04-22_at_2.38.02_PM.jpg\",\n \"Image 2021-04-22 at 2.38.02 PM.jpg\",\n 950,\n 714,\n \"#eef1f7\"\n ]\n }\n ]\n}\n[/block]\n#Using Annotations in Reports\n##Viewing Annotations\nIn a Trend Report, you can show or hide Annotations by clicking on the Annotation icon. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/74e916a-Image_2021-04-22_at_2.42.11_PM.jpg\",\n \"Image 2021-04-22 at 2.42.11 PM.jpg\",\n 2386,\n 1264,\n \"#f1f3f6\"\n ],\n \"caption\": \"When you show the Annotations, you'll see them marked on the Trend Report graph.\"\n }\n ]\n}\n[/block]\nHover over the Annotation dots to see more information. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/b28619e-woopra_annotations.png\",\n \"woopra_annotations.png\",\n 2194,\n 1244,\n \"#c8cacc\"\n ]\n }\n ]\n}\n[/block]\n##Using Annotations in the Timeframe\nYou can also use Annotations to select the Timeframe in reports. To do so, select the Timeframe starting or endpoint, and switch to the Annotations tab at the top. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/ae9f8c6-Image_2021-04-22_at_2.47.18_PM.jpg\",\n \"Image 2021-04-22 at 2.47.18 PM.jpg\",\n 1344,\n 874,\n \"#dfe4f1\"\n ]\n }\n ]\n}\n[/block]\nAfter selecting, this will automatically use the date from the Annotation.","order":10,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-04-21T22:17:07.060Z","createdAt":"2021-04-22T21:26:09.621Z","updatedAt":"2021-04-22T22:32:21.967Z","user":"5adfa297452bd900036d0f67","category":"5b15d7fa8e08710003061581","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","__v":0,"parentDoc":null,"children":[],"childrenPages":[]}]},{"_id":"5cf864c620e5a3003487be0c","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","isAPI":false,"reference":false,"createdAt":"2019-06-06T00:56:38.194Z","order":15,"slug":"activity","title":"Activity","__v":0,"pages":[{"_id":"5cf864d420e5a3003487be13","version":"5b070ce4060bee00035d8d12","updatedAt":"2020-06-16T20:10:28.663Z","createdAt":"2019-06-06T00:56:52.026Z","project":"58b721a1f22b830f009a0bcd","category":"5cf864c620e5a3003487be0c","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/45da702-Image_2019-06-05_at_6.13.40_PM.png\",\n \"Image 2019-06-05 at 6.13.40 PM.png\",\n 2318,\n 1190,\n \"#f2f3f4\"\n ]\n }\n ]\n}\n[/block]\n##Overview\nActivity Reports allow you to see a list of user activities. For example, if you wanted to see a list of new sign-ups, orders, for a particular day, you can create this in the Activity Report.\n\n##Configurations\n\nActivity Reports are comprised of 4 sections: Timeframe, Performed By, Actions, and Columns.\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/a6a50c0-Image_2019-06-05_at_6.15.20_PM.png\",\n \"Image 2019-06-05 at 6.15.20 PM.png\",\n 2298,\n 598,\n \"#f7ebf2\"\n ]\n }\n ]\n}\n[/block]\n###Timeframe\nThis is the first metric you should choose. Here, the timeframe is the period in which Woopra will examine all your data of users that did at least 1 action during that time frame. You can choose today, last 7 days, last 30 days, last 90 days, last 365 days or any custom date range of your choice. The default date range is the last 30 days. We choose the last 365 days for this example.\n\n###Performed By\n\nThink of this step as the segment or group of people you'll be analyzing. Either select an existing segment or create a new one on the fly, by clicking the “+” button in the “Performed By” section of your configuration. More info on how to create a Segment can be found here: [Segments](doc:segments) \n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Timeframe Differences\",\n \"body\": \"It is important to understand the Performed by timeframe configuration differs from the Timeframe configuration above. The Performed by timeframe will create a subset population of people from the Timeframe configuration section. \\n\\nFor example, let's take the following scenario -- You want to run a marketing campaign to target users that are currently active and also made a purchase on last year's Black Friday. First, you would set the Timeframe to the current month to select an initial group of ALL users that have performed at least one action in the current month. Next, under the Performed by timeframe, you select the action “purchased item” with the date for last year's Black Friday. Now, you will have a list of all active users from the past month that purchased an item last Black Friday. Typically the Performed by timeframe is less than or equal to the Timeframe configuration range.\\n\\nAlso here's a quick video explanation as well: https://share.getcloudapp.com/E0uzzAvP\"\n}\n[/block]\n###Actions\n\nThis is the action you want to analyze. You can select any action that you are tracking and add constraints to further filter on the action. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/7d14c34-Image_2019-06-05_at_6.05.13_PM.png\",\n \"Image 2019-06-05 at 6.05.13 PM.png\",\n 974,\n 492,\n \"#e4ecf9\"\n ],\n \"caption\": \"Select your action, then add a constraint. Here we we want to see all the songs that were played by the artist \\\"Queen.\\\"\"\n }\n ]\n}\n[/block]\n###Columns\n\nHere you will select what columns you want to add to the report. Essentially this is what you want to group the results by. For example, you may want certain information displayed such as emails, product names, total amounts, invoice numbers, .etc. \n\n##Exporting and Sharing\n\nNow that you've built your report, you'll want to share it with your team. You can do this by clicking on the 3 dots / ellipsis which will open an options menu for exporting, sharing, tagging, pinning, duplicating and reloading your report. \n\nRemember, reports are not shared with your team by default, so you will need to share it for others to access it. Click share from the menu and select what team you want to share your report with.\n\n###Downloading\n\nYou can download the report in various formats: CSV, CSV (raw), PDF or HTML. Note that CSV (raw) will download some columns, such as average_session_length in total seconds. Exporting the regular CSV for these columns will download timestamps in a string format, e.g. 3 minutes, 21 seconds - 8 minutes, 20 seconds.","excerpt":"","slug":"activity-reports","type":"basic","title":"Activity Reports","__v":0,"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"children":[],"childrenPages":[]}]},{"_id":"5d5b2455613e0f017fb0f8d7","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","isAPI":false,"reference":false,"createdAt":"2019-08-19T22:36:05.019Z","order":16,"slug":"formulas","title":"Formulas","__v":0,"pages":[{"_id":"5d5b24cd2aa30c005e8bd8fa","version":"5b070ce4060bee00035d8d12","updatedAt":"2020-01-07T22:46:15.072Z","createdAt":"2019-08-19T22:38:05.030Z","project":"58b721a1f22b830f009a0bcd","category":"5d5b2455613e0f017fb0f8d7","user":"5e14d778c12c2802e836097a","updates":[],"next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"#Trend Reports\nIn trend reports, you can use formulas to perform any row-based calculations in the Measure By section. If you are looking to transform any dimensions in the Compare By section, you will need to edit these using the [Custom Action Schema Properties](https://docs.woopra.com/docs/custom-schema-properties) \n[block:callout]\n{\n \"type\": \"warning\",\n \"title\": \"Trend Reports\",\n \"body\": \"Trend reports are limited to number type operations only.\"\n}\n[/block]\nYou can add a formula by clicking to add a column under the Measure By section. Here you'll select to add a formula.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/b45ba2c-Image_2019-08-21_at_2.50.18_PM.png\",\n \"Image 2019-08-21 at 2.50.18 PM.png\",\n 1380,\n 1092,\n \"#ececf6\"\n ]\n }\n ]\n}\n[/block]\nOnce you select to add a formula, you can choose which operation you'd like to perform. In the example below, we simply choose to add the People column + 10. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/3f2d081-Screen_Recording_2019-08-21_at_02.43_PM.gif\",\n \"Screen Recording 2019-08-21 at 02.43 PM.gif\",\n 1265,\n 1111,\n \"#f7f7f9\"\n ],\n \"caption\": \"You can perform any row based operations and even combine multiple operations when using Formulas.\"\n }\n ]\n}\n[/block]\n#People Reports\nIn People Reports, you can use formulas to perform row-based operations using numbers, booleans or strings. \n\nTo add a formula, you can click to add a column and select Formulas. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/f8b298d-Image_2019-08-21_at_2.59.56_PM.png\",\n \"Image 2019-08-21 at 2.59.56 PM.png\",\n 1786,\n 912,\n \"#ebeaf5\"\n ]\n }\n ]\n}\n[/block]\nOnce you add a formula, you can select which operation you'd like to use. For example, if I wanted to concatenate two columns together, I could use the CAT operations like so: \n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/1f6c1f4-Screen_Recording_2019-08-21_at_04.36_PM.gif\",\n \"Screen Recording 2019-08-21 at 04.36 PM.gif\",\n 1219,\n 1147,\n \"#f3f4f8\"\n ]\n }\n ]\n}\n[/block]\n#Operations\nThese are the various operations you can use when using formulas. Trend Reports are limited to Number type operations only. \n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"OPERATION\",\n \"h-1\": \"DEFINITION\",\n \"h-2\": \"TYPE\",\n \"h-3\": \"PARAMETERS\",\n \"0-0\": \"**MAX** \",\n \"0-1\": \"Returns the largest number in a list of numbers\",\n \"0-2\": \"Number\",\n \"2-0\": \"AVG\",\n \"1-0\": \"SUM\",\n \"3-0\": \"SQRT\",\n \"4-0\": \"MULTIPLY\",\n \"5-0\": \"SUBTRACT\",\n \"6-0\": \"CEIL\",\n \"7-0\": \"POW\",\n \"8-0\": \"DIVIDE\",\n \"9-0\": \"MIN\",\n \"10-0\": \"ABS\",\n \"11-0\": \"FLOOR\",\n \"1-1\": \"Returns the sum of the numbers\",\n \"2-1\": \"Returns the average of the numbers\",\n \"3-1\": \"Returns the square root of <*number*>\",\n \"4-1\": \"Returns the multiplication of the numbers\",\n \"5-1\": \"Returns the subtraction result {0} - {1}\",\n \"6-1\": \"Rounds <*number*> up\",\n \"7-1\": \"Returns the value of <*number*> ^ <*exponent*>\",\n \"8-1\": \"Returns the division result of <*divisor*> / <*dividend*>\",\n \"9-1\": \"Returns the smallest number in a list of numbers\",\n \"10-1\": \"Returns the absolute value of <*number*>\",\n \"11-1\": \"Rounds <*number*> down\",\n \"1-2\": \"Number\",\n \"2-2\": \"Number\",\n \"3-2\": \"Number\",\n \"4-2\": \"Number\",\n \"5-2\": \"Number\",\n \"6-2\": \"Number\",\n \"7-2\": \"Number\",\n \"8-2\": \"Number\",\n \"9-2\": \"Number\",\n \"10-2\": \"Number\",\n \"11-2\": \"Number\",\n \"0-3\": \"<*number*> **number**\",\n \"1-3\": \"<*operand*> **number**\",\n \"2-3\": \"<*input*> **number**\",\n \"3-3\": \"<*number*> **number**\",\n \"4-3\": \"<*operand*> **number**\",\n \"5-3\": \"<*operand*> **number**\",\n \"6-3\": \"<*number*> **number**\",\n \"7-3\": \"<*number*> **number** \\n<*exponent*> **number**\",\n \"8-3\": \"<*dividend*> **number** \\n<*divisor*> **number**\",\n \"9-3\": \"<*number*> **number**\",\n \"10-3\": \"<*number*> **number**\",\n \"11-3\": \"<*number*> **number**\",\n \"13-0\": \"TO_LOWER_CASE\",\n \"14-0\": \"TO_UPPER_CASE\",\n \"15-0\": \"SUBSTRING\",\n \"16-0\": \"URL_TO_HOST\",\n \"17-0\": \"IF_THEN_ELSE\",\n \"18-0\": \"CAT\",\n \"13-1\": \"Converts <*text*> to lowercase\",\n \"14-1\": \"Converts <*text*> to uppercase\",\n \"15-1\": \"Returns a string that is a substring of <*text*>. The substring begins with the character at <*beginIndex*> and extends to the end of the string\",\n \"16-1\": \"Extracts the host part of <*url*>\",\n \"17-1\": \"Returns <*true result*> if <*condition*> is True, else returns <*false result*>\",\n \"18-1\": \"Concatenates a list of strings\",\n \"13-2\": \"String\",\n \"14-2\": \"String\",\n \"15-2\": \"String\",\n \"16-2\": \"String\",\n \"17-2\": \"String\",\n \"18-2\": \"String\",\n \"13-3\": \"<*text*> **string**\",\n \"12-0\": \"REGEX_GROUP\",\n \"12-1\": \"Finds the subsequence at <*index*> of the input sequence <*pattern*> that matches <*input*>\",\n \"12-3\": \"<*pattern*> **string** \\n<*input*> **string** \\n<*index*> **number**\",\n \"14-3\": \"<*text*> **string**\",\n \"15-3\": \"<*text*> **string** \\n<*beginIndex*> **number** \\n<*endIndex*> **number**\",\n \"16-3\": \"<*url*> **string**\",\n \"17-3\": \"<*condition*> **boolean** \\n<*true result*> **string** \\n<*false result*> **string**\",\n \"18-3\": \"<*part*> **object**\",\n \"19-0\": \"CONTAINS\",\n \"20-0\": \"EMPTY\",\n \"21-0\": \"MATCH\",\n \"22-0\": \"EXACTMATCH\",\n \"23-0\": \"STARTS\",\n \"24-0\": \"ENDS\",\n \"25-0\": \"REGEX_MATCH\",\n \"26-0\": \"OR\",\n \"27-0\": \"AND\",\n \"28-0\": \"NOT\",\n \"29-0\": \"LTE\",\n \"30-0\": \"NEQ\",\n \"32-0\": \"LT\",\n \"33-0\": \"GT\",\n \"19-2\": \"Boolean\",\n \"20-2\": \"Boolean\",\n \"21-2\": \"Boolean\",\n \"22-2\": \"Boolean\",\n \"23-2\": \"Boolean\",\n \"24-2\": \"Boolean\",\n \"25-2\": \"Boolean\",\n \"26-2\": \"Boolean\",\n \"27-2\": \"Boolean\",\n \"28-2\": \"Boolean\",\n \"29-2\": \"Boolean\",\n \"30-2\": \"Boolean\",\n \"32-2\": \"Boolean\",\n \"33-2\": \"Boolean\",\n \"19-1\": \"Returns True if <*input*> contains <*matcher*> \\nWill include partial match\",\n \"20-1\": \"Returns True if <*input text*> is empty\",\n \"21-1\": \"Returns True if <*input*> matches <*matcher*> \\nIncludes exact match (case insensitive)\",\n \"22-1\": \"Returns True if <*input*> matches <*matcher*> (case sensitive) \\nIncludes exact match (case sensitive)\",\n \"23-1\": \"Returns True if <*input*> starts with <*matcher*>\",\n \"24-1\": \"Returns True if <*input*> ends with <*matcher*>\",\n \"25-1\": \"Returns True if <*input*> matches against <*pattern*>\",\n \"19-3\": \"<*input*> **string** \\n<*matcher*> **string**\",\n \"20-3\": \"<*input text*> **string**\",\n \"21-3\": \"<*input*> **string** \\n<*matcher*> **string**\",\n \"22-3\": \"<*input*> **string** \\n<*matcher*> **string**\",\n \"23-3\": \"<*input*> **string** \\n<*matcher*> **string**\",\n \"24-3\": \"<*input*> **string** \\n<*matcher*> **string**\",\n \"25-3\": \"<*input*> **string** \\n<*pattern*> **string**\",\n \"26-1\": \"Returns TRUE if at least one of its arguments is True\",\n \"27-1\": \"Returns TRUE if all of its arguments are True\",\n \"28-1\": \"Reverses the logic state of <*input*>\",\n \"29-1\": \"Returns True if <*Number A*> is less than or equal to <*Number B*>\",\n \"30-1\": \"Returns True if <*Number A*> is not equal to <*Number B*>\",\n \"32-1\": \"Returns TRUE <*Number A*> is less than to <*Number B*>\",\n \"33-1\": \"Returns True if <*Number A*> is less than <*Number B*>\",\n \"26-3\": \"<*condition*> **boolean**\",\n \"27-3\": \"<*condition*> **boolean**\",\n \"28-3\": \"<*input*> **boolean**\",\n \"29-3\": \"<*Number A*> **number** \\n<*Number B*> **number**\",\n \"30-3\": \"<*Number A*> **number** \\n<*Number B*> **number**\",\n \"32-3\": \"<*Number A*> **number** \\n<*Number B*> **number**\",\n \"31-1\": \"Returns TRUE <*Number A*> is equal than to <*Number B*>\",\n \"31-3\": \"<*Number A*> **number** \\n<*Number B*> **number**\",\n \"31-2\": \"Boolean\",\n \"31-0\": \"EQ\",\n \"34-0\": \"GTE\",\n \"34-1\": \"Returns True if <*Number A*> is greater or equal to <*Number B*>\",\n \"34-2\": \"Boolean\",\n \"33-3\": \"<*Number A*> **number** \\n<*Number B*> **number**\",\n \"34-3\": \"<*Number A*> **number** \\n<*Number B*> **number**\",\n \"12-2\": \"String\"\n },\n \"cols\": 4,\n \"rows\": 35\n}\n[/block]","excerpt":"Woopra formulas allow you to do row-based calculations in Trend and People reports. You can also use formulas to create [Custom Action Schema Properties](https://docs.woopra.com/docs/custom-schema-properties) and [Custom Visitor Schema Properties](doc:custom-visitor-schema-properties).","slug":"operations","type":"basic","title":"Overview","__v":0,"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]}]},{"_id":"5b15d89cf68d3a000300a025","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","isAPI":false,"reference":false,"createdAt":"2018-06-05T00:26:04.394Z","from_sync":false,"order":17,"slug":"automation-and-triggers","title":"Automation and Triggers","__v":0,"pages":[{"_id":"5b1817697e8f8f0003bd9910","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15d89cf68d3a000300a025","user":"5ad7decda3740f0003a5f648","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-06T17:18:33.764Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"For Pro Plan users, you can setup Automations and Triggers based on a visitor action or event. You can find Automations by going to the Automate tab on the top of the Woopra homepage. Automations allow you to setup Triggers, Scheduled Batches, and Scheduled Reports. \n\n*Triggers* can be a valuable tool when users visit your webpage or app. Maybe you want to trigger an email or run some specific script when a user completes a specific task. Triggers will allow you to automate these events.\n\n*Schedule Batches* allow you to setup actions to be taken on custom [Segments](https://docs.woopra.com/docs/segments). For example, you can setup a weekly email to be sent to a specific Segment or group of people. \n\n*Scheduled Reports *are used to automate delivering a report that you have built to a specific emails or other file sharing services. For example, instead of signing into Woopra on a daily basis for a single report, you can easily schedule that report to be sent at regular intervals to your email.","excerpt":"","slug":"overview","type":"basic","title":"Overview","__v":0,"parentDoc":null,"updatedAt":"2018-07-13T18:43:32.374Z","metadata":{"title":"","description":"","image":[]},"children":[{"_id":"5b070ce4060bee00035d8cd0","createdAt":"2017-05-08T20:29:57.944Z","link_url":"","slug":"triggers","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"category":"5b15d89cf68d3a000300a025","excerpt":"","hidden":false,"type":"basic","updates":["5ae24486c947b900035e6141","5cd363f03bc9a20045ee3abf"],"parentDoc":"5b1817697e8f8f0003bd9910","title":"Triggers","__v":2,"body":"[block:api-header]\n{\n \"title\": \"Overview\"\n}\n[/block]\nTriggers allow you to define a Segment and trigger an automatic action when certain criteria are met.\n\nWoopra supports multiple types of Triggers:\n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"Trigger Type\",\n \"h-1\": \"Description\",\n \"0-0\": \"Tag Visitor Properties\",\n \"0-1\": \"Add or update visitor properties whenever a visitor performs a specified action. For example, whenever someone visits your site or app, you can copy certain properties, such as IP address from the visit properties to the visitor properties. Remember to add Visitor Schema for the property to leverage this feature.\",\n \"1-0\": \"Inject Script\",\n \"1-1\": \"This allows you to run a custom script in your visitor browser whenever they perform a specified action. For example, you can show a special discount message to your users who have purchased items from your site previously, or encourage a returning visitor to join a newsletter. Possibilities are endless, use this feature wisely!\",\n \"2-0\": \"Webhooks\",\n \"2-1\": \"Woopra can send HTTP requests to different tools whenever a visitor triggers an event.\",\n \"3-0\": \"Email Notifications\",\n \"3-1\": \"You can receive notifications on noteworthy visitor activity directly to the email address associated with your account.\",\n \"4-0\": \"Push Notifications\",\n \"4-1\": \"You will see these notifications of visitor activity at the top of the Woopra web app.\",\n \"5-0\": \"Integrations Actions\",\n \"5-1\": \"You can use any trigger actions automatically installed by your Integrations Apps. These triggers perform many different functions, based on the App’s functionality.\"\n },\n \"cols\": 2,\n \"rows\": 6\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"Woopra limits the amount of triggers to 100. Please contact support if you require more than 100 different triggers.\"\n}\n[/block]\n\n[block:api-header]\n{\n \"title\": \"How To Create a Trigger\"\n}\n[/block]\n## Step 1: Define Your Segment & Trigger Filters\n\nThe first step to creating a Trigger is to define the segment you would like to run the Trigger on and the action you would like to trigger it on.\n\n1. Go to the “Automate” section in your Navigation tab.\n2. Click the “Triggers” button in the sidebar.\n3. Click the “New Trigger” button in the top right corner to create a new Trigger..\n4. Start by entering a name for this Trigger and edit the description if needed\n5. Define the Segment you want to run this Trigger on using the drop-down. If you want to run this Trigger on all visitors who trigger the event, simply leave the dropdown as “All People.” Click the “+” button if you want to use our segmentation filters and build segments on the fly. For more information on how to use the segmentation filters, please see our document on defining segments.\n6. Define the trigger action using the built-in filters.\n7. Select whether you want Woopra to fire the Trigger once per visit, once per visitor or always.\n\n## Step 2: Choose and Set Up Configuration\n\nThe second step to creating a Trigger is to configure the Trigger action. You can choose from any of the options listed above in the Overview.\n\n### Option 1: Tag Visitor Properties\n\nIf you want to add visitor properties to the visitor who’s triggered the action, you can set the properties as a key/value.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/121d002-Tag-Visitor-Propreies.png\",\n \"Tag-Visitor-Propreies.png\",\n 1828,\n 798,\n \"#fcfdfd\"\n ]\n }\n ]\n}\n[/block]\n### Option 2: Run Script Configuration\n\nYou can run a script on your visitor browser as soon as the tracking action is triggered. Woopra is optimized to run Triggers within less than 200 milliseconds from the action trigger time which makes Triggers extremely responsive and smart.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/c6a2bfe-Run-Script.png\",\n \"Run-Script.png\",\n 1828,\n 368,\n \"#f9fafa\"\n ]\n }\n ]\n}\n[/block]\n### Option 3: Webhook Configuration\n\nWebhooks let you register a URL that we will POST anytime an action happens on your website or app. For example, when a user signs up to your website, Woopra can be configured to send an HTTP POST request to your servers (or other 3rd party endpoints).\n\nTo configure your webhook, you must provide a URL endpoint and the optional POST parameters. Just like other Trigger types, your fields can be dynamic containing the triggering action, visit, or visitor data.\n\nThe example below shows an example of how you can POST a request to your website whenever a user signs up from a company with over 300 employees:\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/2b16dd3-Webhook.png\",\n \"Webhook.png\",\n 2286,\n 1380,\n \"#fdfefe\"\n ]\n }\n ]\n}\n[/block]\n### Option 4: Email Notification Configuration\n\nYou may receive notifications via email to the email address associated with your account.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/b79a00d-Email-Notification.png\",\n \"Email-Notification.png\",\n 1838,\n 498,\n \"#fafafa\"\n ]\n }\n ]\n}\n[/block]\n- **Subject** - Customize a subject line for your triggered email. You can leverage our tags that are available in the drop-down menu to make your subject line more relevant.\n- **Message** - Define the body of an email notification. As with the subject line, you can insert tags from the drop-down menu on the right in order to have more contextual information in your email.\n\n### Option 5: Push Notification Configuration\n\nYou can receive push notifications in two ways:\n\n- You can see them in the upper right hand corner of the Woopra’s web app.\n- You can also get them on your mobile phone if you have downloaded our iOS or Android app.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/55fa024-Push-Notification_1.png\",\n \"Push-Notification (1).png\",\n 1830,\n 508,\n \"#fbfbfb\"\n ]\n }\n ]\n}\n[/block]\n\n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"Push Notification Option\",\n \"h-1\": \"Description\",\n \"0-0\": \"Play Sound\",\n \"0-1\": \"Select the sound you would like to play in the web app whenever you receive a push notification.\",\n \"1-1\": \"In this section you can format how your notification would read. Insert tags from the drop-down menu on the right to provide more contextual information about the notification. For example, it’s possible to set up a notification that reads: “John Smith from Health Corp has signed up”. In this case “John Smith” is being generated using the tag “Visitor Name” and “Health Corp” is being generated using the tag “Company”. Note that both “Visitor Name” and “Company” are pieces of [custom visitor data](https://docs.woopra.com/docs/custom-actions-and-visitor-data) that you must send to Woopra. However, tags such as “Device Type” and “Country” do not require any [custom visitor data.](https://docs.woopra.com/docs/custom-actions-and-visitor-data)\",\n \"1-0\": \"Message\"\n },\n \"cols\": 2,\n \"rows\": 2\n}\n[/block]\n- To receive a notification to your Woopra web app and to your mobile phone (if you have downloaded the Woopra iOS app or Android app), check the box next to “Push Notification”\n- Select a sound from the “Play Sound” drop-down menu, such as “Xylophone # 1”\n- Select a thumbnail from the “Thumbnail” drop-down menu, such as “Country Flag”\n- Define the content to be displayed in the notification. Here we will write: “Visitor Name from Company has cancelled their account.”\n\n“Visitor Name” and “Company” are both tags that were selected from the tag drop-down menu at the right. Note that both “Visitor Name” and “Company” are pieces of [custom visitor data](https://www.woopra.com/docs/getting-started/custom-data/) that you must send to Woopra.\n\n### Option 6: Integrations Actions\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/e34cb07-Integrations-Trigger.png\",\n \"Integrations-Trigger.png\",\n 2878,\n 1651,\n \"#ebf1f9\"\n ]\n }\n ]\n}\n[/block]\nThe Integrations apps that you’ve installed would instantly add trigger actions associated with these apps. Most Apps have their own triggers that you can apply. For example, the Zendesk App allows you to change the ticket priority. The HipChat app allows you to post messages to specific rooms when a given action occurs. Customer.io allows you to add visitors to relevant mailing lists based directly on their behavior, and so on.\n\nAfter you’re done setting up you trigger, click on the “Create” button in the top right corner. Your triggers will begin firing when the trigger action is performed.","isReference":false,"link_external":false,"order":0,"version":"5b070ce4060bee00035d8d12","githubsync":"","next":{"description":"","pages":[]},"project":"58b721a1f22b830f009a0bcd","sync_unique":"","user":"5adfa297452bd900036d0f67","updatedAt":"2022-04-25T18:33:26.639Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2020-10-22T22:32:40.576Z","deprecated":false},{"_id":"5b070ce4060bee00035d8cfd","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","category":"5b15d89cf68d3a000300a025","user":"5ad7decda3740f0003a5f648","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-02-17T00:03:03.173Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":1,"body":"[block:api-header]\n{\n \"title\": \"Overview\"\n}\n[/block]\nScheduled batches allow you to take actions on your custom [Segments](https://docs.woopra.com/docs/how-to-create-segments), leveraging Woopra’s automated actions. For this feature, you can periodically run a [Segment ](https://docs.woopra.com/docs/how-to-create-segments)of users that you’ve created in Woopra before, or create a new custom [Segment](https://docs.woopra.com/docs/how-to-create-segments) within the Scheduled Batches editor. Woopra will be running these behavioral segments on a periodical schedule so you can choose which action you want to take on the segments.\n\nFor example, if you’re a SaaS company, you might want to run a weekly Segment of enterprise users who haven’t logged into their accounts within the last 30 days. Then you can apply a Scheduled Batch’s action to add them to your mailing list so you can remind your enterprise accounts on what awesome features they’re missing out or inquire if they’re experiencing any issues with your product.\n\nHere are the following actions that you can run on your segments, leveraging Scheduled Batches:\n\n- **Bulk Update Visitor Properties** - add or update Segment’s visitor properties in bulk on a scheduled basis. For example, whenever users match your segment criteria, you can copy certain properties, such as IP address from the visit properties to the visitor properties. Remember to add Visitor Schema for the property to allow it to appear.\n- **Run Script** – This allows you to run a custom script in your behavioral Segment’s browsers. For example, you can show a message with useful tricks and tips to customers who have just signed up for your product, or encourage returning visitors to join a newsletter. Possibilities are endless, use this feature wisely!\n- **Webhooks** – Woopra can send HTTP requests to different tools for your behavioral Segment on a scheduled basis.\n- **Email Report** – Send Segments to your email address at regular intervals so you can always stay on top of users who are most important to you.\n- **Integrations Actions** – You can use actions automatically installed by your Integrations Apps. These actions perform many different functions, based on the App they originate from. For example, your behavioral Segments can be uploaded as new contacts to HubSpot on a regular schedule.\n- **Dropbox/Box/Google Drive** – Send behavioral Segments to your Dropbox/Box/Google Drive accounts to receive reports at regular intervals, without needing to seek them out each time.\n[block:api-header]\n{\n \"title\": \"How to Create a Scheduled Batch\"\n}\n[/block]\n### Step One: Define a Segment you want to run\n\nThe first step to creating a Scheduled Batch is to select a [Segment](https://docs.woopra.com/docs/how-to-create-segments) you want to act on at a regular interval. You might want to think about which daily/weekly/monthly Segments of users are important to you and your team and which actions you want to take on them. For example, you might think of your new weekly signups where the company size is greater than 100, and you want to automatically sync this segment to Salesforce so your sales team can act on it!\n\n### Step two: Choose and Set Up A Scheduled Batch\n\nThe second step is to configure the Schedule Batch that you want to run on a periodic schedule.\n\n#### Setting Up Your Scheduled Batch\n\n- Go to the Automate Section in the Navigation Bar.\n- Click on the Schedule Batches button in the Sidebar and then select the “New Scheduled Batch” in the upper right-hand corner.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/915f884-Scheduled-Batches.png\",\n \"Scheduled-Batches.png\",\n 2878,\n 1632,\n \"#eef4fb\"\n ]\n }\n ]\n}\n[/block]\n#### Configuration\n\n1. Give schedule Batch a name according to your preference.\n2. Write a description of the Scheduled Batch so your team members not involved in the setup understand its purpose.\n3. Choose a Segment you want to run by selecting the dropdown menu or create a new Segment by clicking on the “+” sign\n4. Select the Frequency for how often you want to run your Segments. They can be run on hourly, daily, weekly or monthly basis.\n5. Select the limit of users within a segment. The maximum number of users withing a single segment is 1,000.\n6. Click on the “Add Action” button to select an action to be performed on your Segments.\n\nEvery Action has its own properties that you can customize based on your preferences. Check out our [Triggers ](https://docs.woopra.com/docs/triggers) documentation to learn more about the actions you can apply.","excerpt":"","slug":"scheduled-batches","type":"basic","title":"Scheduled Batches","__v":0,"parentDoc":"5b1817697e8f8f0003bd9910","updatedAt":"2022-01-08T00:51:52.626Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false},{"_id":"5b070ce4060bee00035d8cfc","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","category":"5b15d89cf68d3a000300a025","user":"5a57f4cd42c0fe001c136f06","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-02-16T22:36:46.474Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":2,"body":"Scheduled Reports allow you to select specific analytics reports in Woopra that will be delivered to you at regular intervals, either via email or the file-sharing service that you’re using.\n\n\n[block:api-header]\n{\n \"title\": \"Creating a New Scheduled Report\"\n}\n[/block]\n- Go to the Automate Section in the Navigation Bar.\n- Click on the “Scheduled Reports” button in the sidebar and select the “New Scheduled Report” in the top right corner.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/780eaf2-Scheduled-Reports-Navigation.png\",\n \"Scheduled-Reports-Navigation.png\",\n 2879,\n 1627,\n \"#edf4fc\"\n ]\n }\n ]\n}\n[/block]\n\n[block:api-header]\n{\n \"title\": \"Setting up Your Scheduled Report\"\n}\n[/block]\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/1f38547-Scheduled-Reports-Weekly-Upgrades.png\",\n \"Scheduled-Reports-Weekly-Upgrades.png\",\n 2432,\n 1434,\n \"#f6f5f8\"\n ]\n }\n ]\n}\n[/block]\n1. Name your Scheduled Report.\n2. Write a description for the Scheduled Report to keep your team on the same page.\n3. Select the schedule for your reports. You can schedule your reports to be delivered on a daily, weekly, or monthly basis.\n4. Click on the “Add Report” button to select the Journey, Retention or Trends report you wish to include. You can select as many reports as you want.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/7948e46-Scheduled-Reports-Selection.png\",\n \"Scheduled-Reports-Selection.png\",\n 1510,\n 1348,\n \"#b5bdcb\"\n ]\n }\n ]\n}\n[/block]\n5. Click on the “Add Action” button to select how your reports are going to be delivered. You can select Email or Integrations Apps as the destination for the Scheduled Reports.\n[block:api-header]\n{\n \"title\": \"Delivering Reports\"\n}\n[/block]\n## Email\n\nThe email action is available for every account out of the box. Enter an email or the list of emails you want your reports to be sent to and select the format for a report. Please note that reports can be delivered as either PDF, HTML or CSV.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/5f5050d-Sheduled-Reports-Email.png\",\n \"Sheduled-Reports-Email.png\",\n 1825,\n 480,\n \"#fcfcfc\"\n ]\n }\n ]\n}\n[/block]\n### Integrations Actions\n\nSome Integrations Apps you install will give you new export capabilities. Those Apps include Box, Dropbox and Google Drive. Use those actions to feed your cloud services with your daily, weekly or monthly snapshots of Woopra reports.","excerpt":"","slug":"scheduled-reports","type":"basic","title":"Scheduled Reports","__v":0,"parentDoc":"5b1817697e8f8f0003bd9910","updatedAt":"2019-09-27T19:55:49.061Z","metadata":{"title":"","description":"","image":[]}}],"childrenPages":[{"_id":"5b070ce4060bee00035d8cd0","createdAt":"2017-05-08T20:29:57.944Z","link_url":"","slug":"triggers","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"category":"5b15d89cf68d3a000300a025","excerpt":"","hidden":false,"type":"basic","updates":["5ae24486c947b900035e6141","5cd363f03bc9a20045ee3abf"],"parentDoc":"5b1817697e8f8f0003bd9910","title":"Triggers","__v":2,"body":"[block:api-header]\n{\n \"title\": \"Overview\"\n}\n[/block]\nTriggers allow you to define a Segment and trigger an automatic action when certain criteria are met.\n\nWoopra supports multiple types of Triggers:\n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"Trigger Type\",\n \"h-1\": \"Description\",\n \"0-0\": \"Tag Visitor Properties\",\n \"0-1\": \"Add or update visitor properties whenever a visitor performs a specified action. For example, whenever someone visits your site or app, you can copy certain properties, such as IP address from the visit properties to the visitor properties. Remember to add Visitor Schema for the property to leverage this feature.\",\n \"1-0\": \"Inject Script\",\n \"1-1\": \"This allows you to run a custom script in your visitor browser whenever they perform a specified action. For example, you can show a special discount message to your users who have purchased items from your site previously, or encourage a returning visitor to join a newsletter. Possibilities are endless, use this feature wisely!\",\n \"2-0\": \"Webhooks\",\n \"2-1\": \"Woopra can send HTTP requests to different tools whenever a visitor triggers an event.\",\n \"3-0\": \"Email Notifications\",\n \"3-1\": \"You can receive notifications on noteworthy visitor activity directly to the email address associated with your account.\",\n \"4-0\": \"Push Notifications\",\n \"4-1\": \"You will see these notifications of visitor activity at the top of the Woopra web app.\",\n \"5-0\": \"Integrations Actions\",\n \"5-1\": \"You can use any trigger actions automatically installed by your Integrations Apps. These triggers perform many different functions, based on the App’s functionality.\"\n },\n \"cols\": 2,\n \"rows\": 6\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"Woopra limits the amount of triggers to 100. Please contact support if you require more than 100 different triggers.\"\n}\n[/block]\n\n[block:api-header]\n{\n \"title\": \"How To Create a Trigger\"\n}\n[/block]\n## Step 1: Define Your Segment & Trigger Filters\n\nThe first step to creating a Trigger is to define the segment you would like to run the Trigger on and the action you would like to trigger it on.\n\n1. Go to the “Automate” section in your Navigation tab.\n2. Click the “Triggers” button in the sidebar.\n3. Click the “New Trigger” button in the top right corner to create a new Trigger..\n4. Start by entering a name for this Trigger and edit the description if needed\n5. Define the Segment you want to run this Trigger on using the drop-down. If you want to run this Trigger on all visitors who trigger the event, simply leave the dropdown as “All People.” Click the “+” button if you want to use our segmentation filters and build segments on the fly. For more information on how to use the segmentation filters, please see our document on defining segments.\n6. Define the trigger action using the built-in filters.\n7. Select whether you want Woopra to fire the Trigger once per visit, once per visitor or always.\n\n## Step 2: Choose and Set Up Configuration\n\nThe second step to creating a Trigger is to configure the Trigger action. You can choose from any of the options listed above in the Overview.\n\n### Option 1: Tag Visitor Properties\n\nIf you want to add visitor properties to the visitor who’s triggered the action, you can set the properties as a key/value.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/121d002-Tag-Visitor-Propreies.png\",\n \"Tag-Visitor-Propreies.png\",\n 1828,\n 798,\n \"#fcfdfd\"\n ]\n }\n ]\n}\n[/block]\n### Option 2: Run Script Configuration\n\nYou can run a script on your visitor browser as soon as the tracking action is triggered. Woopra is optimized to run Triggers within less than 200 milliseconds from the action trigger time which makes Triggers extremely responsive and smart.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/c6a2bfe-Run-Script.png\",\n \"Run-Script.png\",\n 1828,\n 368,\n \"#f9fafa\"\n ]\n }\n ]\n}\n[/block]\n### Option 3: Webhook Configuration\n\nWebhooks let you register a URL that we will POST anytime an action happens on your website or app. For example, when a user signs up to your website, Woopra can be configured to send an HTTP POST request to your servers (or other 3rd party endpoints).\n\nTo configure your webhook, you must provide a URL endpoint and the optional POST parameters. Just like other Trigger types, your fields can be dynamic containing the triggering action, visit, or visitor data.\n\nThe example below shows an example of how you can POST a request to your website whenever a user signs up from a company with over 300 employees:\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/2b16dd3-Webhook.png\",\n \"Webhook.png\",\n 2286,\n 1380,\n \"#fdfefe\"\n ]\n }\n ]\n}\n[/block]\n### Option 4: Email Notification Configuration\n\nYou may receive notifications via email to the email address associated with your account.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/b79a00d-Email-Notification.png\",\n \"Email-Notification.png\",\n 1838,\n 498,\n \"#fafafa\"\n ]\n }\n ]\n}\n[/block]\n- **Subject** - Customize a subject line for your triggered email. You can leverage our tags that are available in the drop-down menu to make your subject line more relevant.\n- **Message** - Define the body of an email notification. As with the subject line, you can insert tags from the drop-down menu on the right in order to have more contextual information in your email.\n\n### Option 5: Push Notification Configuration\n\nYou can receive push notifications in two ways:\n\n- You can see them in the upper right hand corner of the Woopra’s web app.\n- You can also get them on your mobile phone if you have downloaded our iOS or Android app.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/55fa024-Push-Notification_1.png\",\n \"Push-Notification (1).png\",\n 1830,\n 508,\n \"#fbfbfb\"\n ]\n }\n ]\n}\n[/block]\n\n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"Push Notification Option\",\n \"h-1\": \"Description\",\n \"0-0\": \"Play Sound\",\n \"0-1\": \"Select the sound you would like to play in the web app whenever you receive a push notification.\",\n \"1-1\": \"In this section you can format how your notification would read. Insert tags from the drop-down menu on the right to provide more contextual information about the notification. For example, it’s possible to set up a notification that reads: “John Smith from Health Corp has signed up”. In this case “John Smith” is being generated using the tag “Visitor Name” and “Health Corp” is being generated using the tag “Company”. Note that both “Visitor Name” and “Company” are pieces of [custom visitor data](https://docs.woopra.com/docs/custom-actions-and-visitor-data) that you must send to Woopra. However, tags such as “Device Type” and “Country” do not require any [custom visitor data.](https://docs.woopra.com/docs/custom-actions-and-visitor-data)\",\n \"1-0\": \"Message\"\n },\n \"cols\": 2,\n \"rows\": 2\n}\n[/block]\n- To receive a notification to your Woopra web app and to your mobile phone (if you have downloaded the Woopra iOS app or Android app), check the box next to “Push Notification”\n- Select a sound from the “Play Sound” drop-down menu, such as “Xylophone # 1”\n- Select a thumbnail from the “Thumbnail” drop-down menu, such as “Country Flag”\n- Define the content to be displayed in the notification. Here we will write: “Visitor Name from Company has cancelled their account.”\n\n“Visitor Name” and “Company” are both tags that were selected from the tag drop-down menu at the right. Note that both “Visitor Name” and “Company” are pieces of [custom visitor data](https://www.woopra.com/docs/getting-started/custom-data/) that you must send to Woopra.\n\n### Option 6: Integrations Actions\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/e34cb07-Integrations-Trigger.png\",\n \"Integrations-Trigger.png\",\n 2878,\n 1651,\n \"#ebf1f9\"\n ]\n }\n ]\n}\n[/block]\nThe Integrations apps that you’ve installed would instantly add trigger actions associated with these apps. Most Apps have their own triggers that you can apply. For example, the Zendesk App allows you to change the ticket priority. The HipChat app allows you to post messages to specific rooms when a given action occurs. Customer.io allows you to add visitors to relevant mailing lists based directly on their behavior, and so on.\n\nAfter you’re done setting up you trigger, click on the “Create” button in the top right corner. Your triggers will begin firing when the trigger action is performed.","isReference":false,"link_external":false,"order":0,"version":"5b070ce4060bee00035d8d12","githubsync":"","next":{"description":"","pages":[]},"project":"58b721a1f22b830f009a0bcd","sync_unique":"","user":"5adfa297452bd900036d0f67","updatedAt":"2022-04-25T18:33:26.639Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2020-10-22T22:32:40.576Z","deprecated":false},{"_id":"5b070ce4060bee00035d8cfd","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","category":"5b15d89cf68d3a000300a025","user":"5ad7decda3740f0003a5f648","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-02-17T00:03:03.173Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":1,"body":"[block:api-header]\n{\n \"title\": \"Overview\"\n}\n[/block]\nScheduled batches allow you to take actions on your custom [Segments](https://docs.woopra.com/docs/how-to-create-segments), leveraging Woopra’s automated actions. For this feature, you can periodically run a [Segment ](https://docs.woopra.com/docs/how-to-create-segments)of users that you’ve created in Woopra before, or create a new custom [Segment](https://docs.woopra.com/docs/how-to-create-segments) within the Scheduled Batches editor. Woopra will be running these behavioral segments on a periodical schedule so you can choose which action you want to take on the segments.\n\nFor example, if you’re a SaaS company, you might want to run a weekly Segment of enterprise users who haven’t logged into their accounts within the last 30 days. Then you can apply a Scheduled Batch’s action to add them to your mailing list so you can remind your enterprise accounts on what awesome features they’re missing out or inquire if they’re experiencing any issues with your product.\n\nHere are the following actions that you can run on your segments, leveraging Scheduled Batches:\n\n- **Bulk Update Visitor Properties** - add or update Segment’s visitor properties in bulk on a scheduled basis. For example, whenever users match your segment criteria, you can copy certain properties, such as IP address from the visit properties to the visitor properties. Remember to add Visitor Schema for the property to allow it to appear.\n- **Run Script** – This allows you to run a custom script in your behavioral Segment’s browsers. For example, you can show a message with useful tricks and tips to customers who have just signed up for your product, or encourage returning visitors to join a newsletter. Possibilities are endless, use this feature wisely!\n- **Webhooks** – Woopra can send HTTP requests to different tools for your behavioral Segment on a scheduled basis.\n- **Email Report** – Send Segments to your email address at regular intervals so you can always stay on top of users who are most important to you.\n- **Integrations Actions** – You can use actions automatically installed by your Integrations Apps. These actions perform many different functions, based on the App they originate from. For example, your behavioral Segments can be uploaded as new contacts to HubSpot on a regular schedule.\n- **Dropbox/Box/Google Drive** – Send behavioral Segments to your Dropbox/Box/Google Drive accounts to receive reports at regular intervals, without needing to seek them out each time.\n[block:api-header]\n{\n \"title\": \"How to Create a Scheduled Batch\"\n}\n[/block]\n### Step One: Define a Segment you want to run\n\nThe first step to creating a Scheduled Batch is to select a [Segment](https://docs.woopra.com/docs/how-to-create-segments) you want to act on at a regular interval. You might want to think about which daily/weekly/monthly Segments of users are important to you and your team and which actions you want to take on them. For example, you might think of your new weekly signups where the company size is greater than 100, and you want to automatically sync this segment to Salesforce so your sales team can act on it!\n\n### Step two: Choose and Set Up A Scheduled Batch\n\nThe second step is to configure the Schedule Batch that you want to run on a periodic schedule.\n\n#### Setting Up Your Scheduled Batch\n\n- Go to the Automate Section in the Navigation Bar.\n- Click on the Schedule Batches button in the Sidebar and then select the “New Scheduled Batch” in the upper right-hand corner.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/915f884-Scheduled-Batches.png\",\n \"Scheduled-Batches.png\",\n 2878,\n 1632,\n \"#eef4fb\"\n ]\n }\n ]\n}\n[/block]\n#### Configuration\n\n1. Give schedule Batch a name according to your preference.\n2. Write a description of the Scheduled Batch so your team members not involved in the setup understand its purpose.\n3. Choose a Segment you want to run by selecting the dropdown menu or create a new Segment by clicking on the “+” sign\n4. Select the Frequency for how often you want to run your Segments. They can be run on hourly, daily, weekly or monthly basis.\n5. Select the limit of users within a segment. The maximum number of users withing a single segment is 1,000.\n6. Click on the “Add Action” button to select an action to be performed on your Segments.\n\nEvery Action has its own properties that you can customize based on your preferences. Check out our [Triggers ](https://docs.woopra.com/docs/triggers) documentation to learn more about the actions you can apply.","excerpt":"","slug":"scheduled-batches","type":"basic","title":"Scheduled Batches","__v":0,"parentDoc":"5b1817697e8f8f0003bd9910","updatedAt":"2022-01-08T00:51:52.626Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false},{"_id":"5b070ce4060bee00035d8cfc","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","category":"5b15d89cf68d3a000300a025","user":"5a57f4cd42c0fe001c136f06","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-02-16T22:36:46.474Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":2,"body":"Scheduled Reports allow you to select specific analytics reports in Woopra that will be delivered to you at regular intervals, either via email or the file-sharing service that you’re using.\n\n\n[block:api-header]\n{\n \"title\": \"Creating a New Scheduled Report\"\n}\n[/block]\n- Go to the Automate Section in the Navigation Bar.\n- Click on the “Scheduled Reports” button in the sidebar and select the “New Scheduled Report” in the top right corner.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/780eaf2-Scheduled-Reports-Navigation.png\",\n \"Scheduled-Reports-Navigation.png\",\n 2879,\n 1627,\n \"#edf4fc\"\n ]\n }\n ]\n}\n[/block]\n\n[block:api-header]\n{\n \"title\": \"Setting up Your Scheduled Report\"\n}\n[/block]\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/1f38547-Scheduled-Reports-Weekly-Upgrades.png\",\n \"Scheduled-Reports-Weekly-Upgrades.png\",\n 2432,\n 1434,\n \"#f6f5f8\"\n ]\n }\n ]\n}\n[/block]\n1. Name your Scheduled Report.\n2. Write a description for the Scheduled Report to keep your team on the same page.\n3. Select the schedule for your reports. You can schedule your reports to be delivered on a daily, weekly, or monthly basis.\n4. Click on the “Add Report” button to select the Journey, Retention or Trends report you wish to include. You can select as many reports as you want.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/7948e46-Scheduled-Reports-Selection.png\",\n \"Scheduled-Reports-Selection.png\",\n 1510,\n 1348,\n \"#b5bdcb\"\n ]\n }\n ]\n}\n[/block]\n5. Click on the “Add Action” button to select how your reports are going to be delivered. You can select Email or Integrations Apps as the destination for the Scheduled Reports.\n[block:api-header]\n{\n \"title\": \"Delivering Reports\"\n}\n[/block]\n## Email\n\nThe email action is available for every account out of the box. Enter an email or the list of emails you want your reports to be sent to and select the format for a report. Please note that reports can be delivered as either PDF, HTML or CSV.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/5f5050d-Sheduled-Reports-Email.png\",\n \"Sheduled-Reports-Email.png\",\n 1825,\n 480,\n \"#fcfcfc\"\n ]\n }\n ]\n}\n[/block]\n### Integrations Actions\n\nSome Integrations Apps you install will give you new export capabilities. Those Apps include Box, Dropbox and Google Drive. Use those actions to feed your cloud services with your daily, weekly or monthly snapshots of Woopra reports.","excerpt":"","slug":"scheduled-reports","type":"basic","title":"Scheduled Reports","__v":0,"parentDoc":"5b1817697e8f8f0003bd9910","updatedAt":"2019-09-27T19:55:49.061Z","metadata":{"title":"","description":"","image":[]}}]}]},{"_id":"5b15d8a5563b2e00036d3516","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","isAPI":false,"reference":false,"createdAt":"2018-06-05T00:26:13.378Z","from_sync":false,"order":18,"slug":"configurations","title":"Configurations","__v":0,"pages":[{"_id":"5bbe7f8f4d24d900031686b3","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15d8a5563b2e00036d3516","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-10-10T22:39:11.236Z","link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"#Users\nThis is where you can add new users to your projects. To do this, you can navigate to the 'Configure' tab and click on 'Users' on the left. Then you can click on the 'New User' button on the top right.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/0de05fa-Screen_Recording_2018-10-10_at_04.10_PM.gif\",\n \"Screen Recording 2018-10-10 at 04.10 PM.gif\",\n 1497,\n 1076,\n \"#f2f5fd\"\n ]\n }\n ]\n}\n[/block]\n##User Configurations\nWhen you add a new user, you can select whether they are an Admin or Regular User. You can also select which group they belong to. You can also edit an existing member by clicking on their name when viewing the Users list. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/f8ae783-Image_2018-10-10_at_4.15.07_PM.png\",\n \"Image 2018-10-10 at 4.15.07 PM.png\",\n 2988,\n 1716,\n \"#eff3fc\"\n ]\n }\n ]\n}\n[/block]\n#Groups\nYou can create different Groups or teams of people that have access to different reports or features. To create a Group, you can navigate to 'Configure' tab and click on 'Groups' on the left. Then you can click on the 'New User' button on the top right.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/e840668-Screen_Recording_2018-10-10_at_04.17_PM.gif\",\n \"Screen Recording 2018-10-10 at 04.17 PM.gif\",\n 1494,\n 1020,\n \"#f1f4fd\"\n ]\n }\n ]\n}\n[/block]\n##Group Configurations\nAfter creating a Group, you can select what reports they have access to. You can also limit the group's access to Automations.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/29ef79e-Image_2018-10-10_at_4.22.05_PM.png\",\n \"Image 2018-10-10 at 4.22.05 PM.png\",\n 2978,\n 1230,\n \"#ebf0fc\"\n ]\n }\n ]\n}\n[/block]","excerpt":"How to add users to Woopra and create Groups or Teams","slug":"users-and-group","type":"basic","title":"Users and Group","__v":0,"parentDoc":null,"updatedAt":"2018-10-10T23:35:05.015Z","metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"60ad5c081363b200625a9b12","metadata":{"image":[],"title":"","description":""},"api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"next":{"description":"","pages":[]},"title":"Global Filters","updates":[],"type":"basic","slug":"global-filters","excerpt":"","body":"Global filters can hide specific profiles or actions from being used in reports or accessed in Woopra. \n\nFor example, if you want to filter out any pageviews that contain \"admin,\" you can navigate to the Configure tab, then click on \"Global Filters\" and create a new filter. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/16e50f4-Image_2021-05-25_at_1.15.47_PM.png\",\n \"Image 2021-05-25 at 1.15.47 PM.png\",\n 406,\n 454,\n \"#232428\"\n ]\n }\n ]\n}\n[/block]\nSelect the action and add any constraints. In this case, we're filtering out pageview events where the URL contains \"/admin.\" \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/fed3dbe-unnamed_4.png\",\n \"unnamed (4).png\",\n 1404,\n 981,\n \"#e8ebf2\"\n ]\n }\n ]\n}\n[/block]\nThis event will now be hidden and filtered out from any profiles or report results. \n\nGlobal filters are only accessible by admins Woopra.","order":1,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-05-25T15:36:51.786Z","createdAt":"2021-05-25T20:20:24.317Z","updatedAt":"2021-05-28T23:18:23.336Z","user":"5adfa297452bd900036d0f67","category":"5b15d8a5563b2e00036d3516","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","__v":0,"parentDoc":null,"children":[],"childrenPages":[]},{"_id":"5b18188d7e8f8f0003bd991f","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15d8a5563b2e00036d3516","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-06T17:23:25.031Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":2,"body":"##User Exclusions## \n\nIn Woopra, there might be situations where you want to exclude users from tracking. For example, tracking internal employee behavior on your website or application might skew the data as they tend to be more active than your customers. In these cases, you may want to exclude yourself and your team from being tracked using the Exclude feature to reduce the noise in your data.\n\nYou can exclude yourself and your team from being tracked by providing an IP address, visitor name, or visitor ID. To access the Exclude feature, click on the “Configure” button in your navigation bar. Locate the “Excludes” option under the sidebar’s “Admin” section. Click on the “+ New Exclude” button to exclude a visitor.\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/8668151-Excludes.gif\",\n \"Excludes.gif\",\n 1438,\n 712,\n \"#eef2fc\"\n ]\n }\n ]\n}\n[/block]\n##System Generated Action Exclusions##\n\nWoopra automatically generates actions for system changes such as property updates, segment changes and integration syncs and so on. You'll see these events populate on the individual-profiles within Woopra as shown in the “Joined Segment” example below. \n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/0ead77a-Screen_Shot_2018-05-16_at_1.29.05_PM.png\",\n \"Screen Shot 2018-05-16 at 1.29.05 PM.png\",\n 2400,\n 1692,\n \"#f8f9fb\"\n ]\n }\n ]\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Multiple exclusions\",\n \"body\": \"You can use a comma to add more than one exclusion. For example, an IP exclusion can be entered as 1.1.1.1, 1.1.1.2, etc.\"\n}\n[/block]\nThe majority of these events occur asynchronously in real-time and do not impact things like session duration during analysis. However, some actions, such as Salesforce actions, take more time to process and in this case, it can be helpful to exclude them from your segmentation. For example, let's say you want to analyze the total action duration of product usage for company “X.” Excluding system generated events will give you the exact amount of time company “X” has been using your product. If you would like to exclude these types of actions, you will need to do so when building the reports.","excerpt":"","slug":"exclusions","type":"basic","title":"Exclusions","__v":0,"parentDoc":null,"updatedAt":"2020-05-20T22:25:17.794Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"children":[],"childrenPages":[]},{"_id":"5b1819addbfa050003d7e8ca","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15d8a5563b2e00036d3516","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-06-06T17:28:13.052Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":3,"body":"When does your day start? Woopra needs to know to build your reports. Your timezone will tell Woopra when the day starts and ends, which will enable you to have reports that accurately reflect the timezone in which your team operates.\nWhen you add your website, Woopra will ask you for the website’s timezone. Usually, the timezone should be the same timezone as your business’ headquarters. We highly recommend our customers not change the timezone frequently as it can slow down your reporting for a short period after the update.\n\nTo change your timezone, click on the “Configure” button in the navigation bar and then select the “Time Preferences” option in the sidebar.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/5f0707a-timezone.png\",\n \"timezone.png\",\n 2880,\n 1652,\n \"#edf4fb\"\n ]\n }\n ]\n}\n[/block]","excerpt":"","slug":"time-preferences","type":"basic","title":"Time Preferences","__v":0,"parentDoc":null,"updatedAt":"2018-06-06T17:28:37.554Z","metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"5b1819e553c9ae00037ceda3","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b15d8a5563b2e00036d3516","user":"5adfa297452bd900036d0f67","updates":["5ef42c6be66e7600509ead8e"],"next":{"pages":[],"description":""},"createdAt":"2018-06-06T17:29:09.930Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":4,"body":"##Overview\n\nSecure tracking allows you to only accept [server-side](doc:serverside-tracking) events from sources which contain the secret key, generated when you turn on secure tracking. \n\nYou will need to include this key with the events for Woopra to accept these and include them in your actions. Any events that are sent which do not contain the secret key will not be accepted. We don't recommend this feature unless you're only interested in [server-side](doc:serverside-tracking) tracking. \n\n##How to Enable\n\nIn the configurations is where you can select to enable Secure Tracking. You can set an ID and Secret that you would use for Secure Tracking.\n\nHTTP Basic Authentication (RFC2617) is a simple authentication scheme that sends a username and a password (separated by a colon and base64 encoded) in the headers of each HTTP request. \n\nIf this is used over unencrypted HTTP this is considered insecure (as it's trivial to sniff the password on the network), but in combination with HTTPS and a signed server certificate, it's reasonably secure.\n\nYou can generate a new username, password in the Woopra web app and use the generated pair to send secure HTTP tracking requests.\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/40966b5-secure_tracking.png\",\n \"secure tracking.png\",\n 2380,\n 528,\n \"#f9f3fa\"\n ]\n }\n ]\n}\n[/block]","excerpt":"","slug":"secure-tracking","type":"basic","title":"Secure Tracking","__v":1,"parentDoc":null,"updatedAt":"2018-07-16T17:33:54.863Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"children":[],"childrenPages":[]},{"_id":"60c40065390fcd007a1196aa","metadata":{"image":[],"title":"","description":""},"api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"next":{"description":"","pages":[]},"title":"Quota History","updates":[],"type":"basic","slug":"quota-history","excerpt":"","body":"To see your quota history, you must be logged in as the owner of the account. Navigate to the project dropdown, then select your organization name. From there click quota history. \n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/a337dfb-Screen_Recording_2021-06-11_at_05.29.40_PM.gif\",\n \"Screen Recording 2021-06-11 at 05.29.40 PM.gif\",\n 698,\n 701,\n \"#e1e5f6\"\n ]\n }\n ]\n}\n[/block]","order":5,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-06-11T22:05:36.918Z","createdAt":"2021-06-12T00:31:33.617Z","updatedAt":"2021-06-12T00:31:33.617Z","user":"5adfa297452bd900036d0f67","category":"5b15d8a5563b2e00036d3516","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","__v":0,"parentDoc":null,"children":[],"childrenPages":[]}]},{"_id":"5bbe5451ad575900030ffc35","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","isAPI":false,"reference":false,"createdAt":"2018-10-10T19:34:41.301Z","from_sync":false,"order":19,"slug":"sharing-and-organizing-reports","title":"Sharing and Organizing Reports","__v":0,"pages":[{"_id":"5bbe5470ad575900030ffc36","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5bbe5451ad575900030ffc35","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-10-10T19:35:12.514Z","link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"#Tagging Reports\nYou can tag reports to organize them for easy access. You can also share tags with team members so everyone on your team has access to them.\n##Creating A Tag\nTo create a tag, you can click the 'Add Tag' Button on the left side when you are on the Analyze page.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/66961a2-5f22d4ac240548901ee06c5efc3514ef_Image_2018-10-10_at_3.48.50_PM.png\",\n \"[5f22d4ac240548901ee06c5efc3514ef]_Image 2018-10-10 at 3.48.50 PM.png\",\n 2999,\n 2056,\n \"#f0f3fb\"\n ]\n }\n ]\n}\n[/block]\n##Adding Reports to Tags\nOnce you have created a tag, you can add tags to your reports by clicking on the ellipsis while viewing a report and click on 'Tag' from the drop-down. \n\n##Sharing Tags With Groups\nYou can also share tags with [Group](https://docs.woopra.com/docs/users-and-group#section-groups) members. While viewing a tag, you can click the ellipsis on the right and click 'Share' and then select the [Group](https://docs.woopra.com/docs/users-and-group#section-groups) or team you would like to share the tags with. \n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/29b4119-Image_2018-10-10_at_3.54.52_PM.png\",\n \"Image 2018-10-10 at 3.54.52 PM.png\",\n 3004,\n 1162,\n \"#eaeffb\"\n ],\n \"border\": true,\n \"sizing\": \"smart\"\n }\n ]\n}\n[/block]\n#Snapshots\n\nSnapshots generate a URL of the report you want to share. You can share this URL with anyone, whether they are apart of Woopra or not. This URL will link to a snapshot of the report you have created. \n\nTo take a snapshot, click the ellipsis and select snapshot. This will copy a URL for you to share. This is a public link, so anyone with the link will have access to that snapshot. This is an easy way to share reports with external teams or anyone whom you want to share the report with. \n\nEditing the report will not change the snapshot, since the snapshot is a view of the report at the time when the snapshot was created.","excerpt":"Once you create your report, it's not going to be very useful if the right people don't see it. That's why it's important to always share your report to the correct teams or people.","slug":"sharing-reports","type":"basic","title":"Sharing Reports","__v":0,"parentDoc":null,"updatedAt":"2018-10-10T23:24:30.810Z","metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"5dd7126c8965ff0011718cdc","version":"5b070ce4060bee00035d8d12","updatedAt":"2019-11-21T22:46:40.474Z","createdAt":"2019-11-21T22:40:44.401Z","project":"58b721a1f22b830f009a0bcd","user":"5adfa297452bd900036d0f67","category":"5bbe5451ad575900030ffc35","updates":[],"next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":1,"body":"[block:callout]\n{\n \"type\": \"warning\",\n \"title\": \"Scheduled Reports Deprecation\",\n \"body\": \"We will be deprecating our [Scheduled Reports](https://docs.woopra.com/docs/scheduled-reports) and will be replacing them with Report Subscriptions.\"\n}\n[/block]\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/965678e-Image_2019-11-21_at_2.37.21_PM.png\",\n \"Image 2019-11-21 at 2.37.21 PM.png\",\n 1202,\n 594,\n \"#f3f5f9\"\n ]\n }\n ]\n}\n[/block]\n\n#What are Subscriptions\nIn Woopra, Subscriptions allow you to receive emailed reports directly to your inbox. You can easily subscribe to any report and select how often you'd like to receive the reports. \n\n#How to Subscribe\nWhen you are viewing a report, hit the Subscribe button on the top right. Here you can select to receive an email of the report you are viewing on a set interval.\n\nYou can select Daily, Weekly, or Monthly intervals.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/fe753c2-Image_2019-11-21_at_2.39.35_PM.png\",\n \"Image 2019-11-21 at 2.39.35 PM.png\",\n 738,\n 472,\n \"#eaeff3\"\n ]\n }\n ]\n}\n[/block]\nAt the bottom of the selection, you can view all your active subscriptions.\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/cf111de-Image_2019-11-21_at_2.43.19_PM.png\",\n \"Image 2019-11-21 at 2.43.19 PM.png\",\n 2382,\n 608,\n \"#f0f2f6\"\n ]\n }\n ]\n}\n[/block]","excerpt":"","slug":"subscribing-to-reports","type":"basic","metadata":{"description":"","title":"","image":[]},"title":"Report Subscriptions","__v":0,"parentDoc":null,"children":[],"childrenPages":[]}]},{"_id":"5b4540b13e462a0003378e8e","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","isAPI":false,"reference":false,"createdAt":"2018-07-10T23:26:41.158Z","from_sync":false,"order":20,"slug":"additional-learning","title":"Additional Learning","__v":0,"pages":[{"_id":"5b4540d369638a0003bc6475","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b4540b13e462a0003378e8e","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-07-10T23:27:15.223Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":0,"body":"**Action: (proposed differentiate from event)** An action is an automated trigger or other Woopra engagement tool that can be or has been run for a visitor.\n\n**Automations:** Automations are part of Woopra's engagement layer. They are set up ahead of time and then run either in real-time on a visitor by visitor basis--like sms triggers--or they run on a schedule and perform some action on a number of visitors at once--like adding people to an email marketing list.\n\n**Dynamic Fields:** Special kind of visitor data which is defined as a formula rather than a static value. The value is calculated each time data about a visitor is queried. These allow you to have constantly changing information about a visitor in their profile. For example the number of visits to your website in the past week can be a dynamic field, but would not work as a static one. See [Visitor Properties](doc:visitor-properties).\n\n**Engagement Layer:** Woopra's engagement layer is the part of the Woopra system that allows Woopra users to actually interact with their visitors and visitor data. Real time triggers, and scheduled batches are examples of Automations. There are also non-automated parts of the engagement layer such as exports.\n\n**Event (proposed differentiate from action):** An event is a specific instance of tracked activity of a visitor. For instance a pageview is an event that Woopra commonly tracks. Events are one of Woopra's three main data scopes.\n\n**Identify:** The concept of identification in Woopra refers to setting properties in the visitor data scope, that is, on a visitor's profile. There are methods in the tracking SDKs to accomplish this, and they are usually called `identify()`. This term can also be used to specifically refer to sending [woopra.identify()](ref:woopraidentify) in your track requests in order to make sure you don't get split profiles.\n\n**Scheduled Batch:** A scheduled batch is an automation that runs at an interval and makes a query to find a list of people. It then performs some engagement layer action on these people, such as Syncing them to an external contact list.\n\n**Scheduled Report:** A scheduled report is a Woopra report that is run at an interval and sent to an email address or perhaps uploaded to dropbox or google drive. EX: daily signups report, weekly page views, etc.\n\n**Scope:** Data scopes are essentially *kinds* of data. Woopra has three data scopes: visitor (people), visitor (session), and action (events). \n\n**Split Profiles:** Refers to a situation in which a single person is tracked in a Woopra account on multiple occasions, and has more than one profile in Woopra. Split profiles are generally caused by lack of `identify` calls in the tracking code.\n\n**Static Fields:** A static field is a visitor property that has a value that does not change unless changed. See [Visitor Properties](doc:visitor-properties).\n\n**Trigger:** A trigger is an action in the woopra engagement layer that runs in real time for one user at a time. EX: you can set up a trigger to show a particular web survey to anyone who engages with a given feature on your website.\n\n**Visit:** A visit is also known as a session. It represents a group of events that have happened in a given amount of time, usually on the same device and ideally, in one \"sitting\" on the part of the visitor.\n\n**Visitor:** A visitor is a person who is tracked in Woopra. Other systems call them users, people, contacts, etc.","excerpt":"An ever-growing list of words with special meanings in Woopra","slug":"glossary","type":"basic","title":"Glossary","__v":0,"parentDoc":null,"updatedAt":"2020-10-23T00:43:36.096Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2020-10-22T22:32:40.576Z","children":[],"childrenPages":[]},{"_id":"5b454166fa145500030418b0","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b4540b13e462a0003378e8e","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-07-10T23:29:42.669Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":2,"body":"Templates are used to dynamically insert content into text placeholders. These are used in our [Schemas](https://docs.woopra.com/docs/configuring-your-schema#section-event-template) and in our [Automation and Triggers](https://docs.woopra.com/docs/triggers). \n\nThere are two main uses for Woopra templates: \n - Determining how an event looks in the visitor profile (i.e: \"Viewed Page /docs\" instead of \"Did pageview\").\n - Using event and visitor properties in the configuration of an automation like a trigger, for instance when sending a text message or transactional email in which you want to include a visitor property like the person's name, or an action property like the url of their abandoned cart.\n\n## The Templating System\nWoopra templates use the `${` and `}` format for template expressions. In general the format will be: \n`${<SCOPE>(visitor|action|visit).<property name>}`.\n\nThe available scopes are `visitor`, `action`, and `visit`. The visitor scope means visitor properties like a visitor's `first_name`. The Action scope means action/event properties, like the `url` of a pageview event. The visit scope has session level properties such as `browser` or `ip`.\n\n### Templating Values\nThe SCOPE part allows you to declare if you are referring to a session/visit property, a visitor property, or to an action property of the current action (in the case of a trigger, this would be the action that is selected in the \"trigger when\" section when you define your trigger.)\n\nTo see what action properties are available for a given action, it is best to go check out your event schemas in the Woopra interface: **Configure > Action Schemas**. Similarly, you can see what properties/fields you have defined in your schemas for visitors in **Configure > Visitor Schemas**.\n\nA `visit` scope allows you to use a visit property which actually applies to many actions. For instance things like: ip address, referer/source, Operating system, browser, etc. are all visit properties and can be accessed in templates using, e.g.: `${visit.browser}` For more on the visit scope and properties, see [Visitor Properties](doc:visitor-properties), and finally [Generated Visit Properties](doc:generated-visit-properties) which discusses a few properties like `browser` that are generated automatically when possible, and generally available in any templating situation. They are not always present, however. For example, you wouldn't expect to have a `visit.browser` on a session that only includes a serverside event like \"email bounced\" in which the visitor never actively used a browser to interact with your system.\n\n\n\n### Template Logic\nAt the moment, template logic is very minimal, but you can submit a feature request to vote more development in this area. For now, you can use AND/IF statement to determine if one value exists and if so to use it, otherwise to use a default value. The format is demonstrated in a couple of example use cases is as follows:\n\nYou could send a personal message using Drift or Olark for example like this: \n`Hello ${#IF ${visitor.name}, Hello ${visitor.name}!, Hi there! ) }`\n\nFor the Bellgram app, the \"Sent a text\" event is titled like this in the interface: \n`Sent A Text to ${#IF ${action.agent_name}, ${action.agent_name} at , ${#IF ${action.customer_name}, ${action.customer_name} at }} ${action.destination_phone_number}'`\nSo this example would say: If the agent_name is on the event properties (which in this case means that the agent was the recipient), say \"Sent a Text to Ralph at (415) 555-5555\", otherwise, if the customer_name exists, (which would mean that the agent sent the text to the customer) then say: \"Sent a text to CUSTOMER NAME at (415) 555-5555`","excerpt":"","slug":"woopra-templates","type":"basic","title":"Woopra Templates","__v":0,"parentDoc":null,"updatedAt":"2020-10-23T00:40:35.226Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2020-10-22T22:06:09.561Z","children":[],"childrenPages":[]},{"_id":"5b45419f3e462a0003378e96","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b4540b13e462a0003378e8e","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-07-10T23:30:39.184Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":3,"body":"Woopra's segmentation allows you to use regular expressions to match very specific patterns in Woopra visitor and event property values. The regex is compiled and run using Oracle's regular expressions, the documentation for which can be found here: https://docs.oracle.com/javase/tutorial/essential/regex/\n\nThis document is not designed to be a full introduction to regex, but rather to serve as a reference for common patterns and usages you might want to use in Woopra segmentation.\n\n\n\n##Using OR\nOne of the most common reasons that a Woopra user who is not already familiar with regex might want to use regex, is to match any of multiple values. For example, let us imagine we are attempting to build a segment in Woopra of people who's company field is \"woopra\" OR \"oracle.\" The best way to do this would be to create a segment of people who \"ARE\" `company` contains \"woopra\" or \"oracle\". While you can do this in Woopra without using regular expressions, it can become quite tedious to build a separate filter for each possible value you are looking for, and then to combine all of these \"OR'ed\" conditions with some other \"AND'ed\" ones. The way to express \"OR\" in a regular expression is with the bar: `|`. So to find people who's company field is either \"woopra\" or \"oracle\", use this regular expression:\n```regex\nwoopra|oracle\n```\n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Trouble getting your regex to work. Try putting '(?i)' or '.*' before the expression (without quotes).\"\n}\n[/block]\n## Case-insensitive matching\nIn Oracle regex, you can make a group or character class case insensitive by using the `(?i)` pattern. It will apply to the next group or class you have in the regex, so to only allow the \"W\" in Woopra to be case insensitive: `(?i)Woopra`. However, if you want the entire word to be case insensitive, you can group the word by using parentheses, and the case insensitivity will apply to all the characters in the match group (within parentheses) that follows the `(?i)`. So to put it all together:\n```regex\n(?i)(.*woopra.*)\n```\nThat pattern will match all of these: \"woopra\", \"woopra, inc.\", and \"Woopra, Inc.\"\n\nGoing one step further, if you want to find multiple companies, like with the example above using OR, you may do it all together like this: \n```regex\n(?i)(.*woopra.*|.*oracle.*)\n```\n\n## Common pitfalls, and some Examples\n###why doesn't the regex `woopra` match `Woopra, INC.`?\nA Regex matches the entire length of the value that is being checked. So the above regex, `woopra` will only match values that are exactly `\"woopra\"` with no other spaces or characters in the value, and also, with no capital letters. To Match `\"Woopra Inc.\"`, you would need to do two things: make your regex case insensitive, and alter the regex to allow for other characters to be present, as long as \"woopra\" is in the value somewhere.\n\n#### Matching other characters\nOne of the most useful patterns in regex is `.*` (dot star). The dot, in regex, means match ANY character at all (including spaces, and non-alphanumeric characters). The star is what's known as a quantifier, it means \"match 0 or more of the preceding character or group. (A group could be a character class in square brackets, or it could be anything in parentheses).\n\nSo to match `\"Woopra, Inc.\"` as well as `\"Woopra Incorporated\"` along with any other potential names for the same company, what you essentially want to say is \"match any company that includes the word 'woopra'\". You would do this by surrounding your `woopra` regex with `.*`s like this: \n```regex\n.*woopra.*\n```","excerpt":"Using Regex in Woopra segmentation","slug":"regular-expressions-regex","type":"basic","title":"Regular Expressions (RegEx)","__v":0,"parentDoc":null,"updatedAt":"2021-04-08T22:18:56.479Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-04-08T19:00:49.207Z","children":[],"childrenPages":[]},{"_id":"5b6b8db2a0f260000332b728","version":"5b070ce4060bee00035d8d12","project":"58b721a1f22b830f009a0bcd","category":"5b4540b13e462a0003378e8e","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-08-09T00:41:22.303Z","link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":4,"body":"Referrer (originally misspelled referer: https://en.wikipedia.org/wiki/HTTP_referer#Etymology), can often be inaccurate when using this as a filter when analyzing traffic or marketing campaigns. Because this field is an optional part of the HTTP request, there can be several reasons why using this filter can produce inaccurate results. \n\n##Referrer Blocking \n\nOne such reason is due to referrer hiding. With the increase in privacy concerns, many servers and browsers will not send the referrer data, or can even send false data. Additionally, browsers will not send the referrer field when they are redirected using the “Refresh” field. \n\nAnother reason is due to Secure (HTTPS) access. If the user connects from HTTPS to HTTP, this will also cause the referrer to not be sent. This is implemented to increase security for end users. \n\nAlso, some pages that use HTML5 can add attributes (rel=”noreferrer”) which will instruct the user agent to not send a referrer.\n\nThese are just some of the reasons why using referrer can be inaccurate. While they can be useful to see a general or overall view of where you're traffic is coming from, they might not be entirely correct. \n\nSo, how does one get more accurate data on where a user comes from?\n\n##More Accurate Results Using UTM Tags\n\nIn Woopra, we recommend the use of UTM tags when linking traffic to your site. If you are running a campaign, Woopra can use these UTM tags to automatically track campaigns and allow you to filter more accurately on the traffic to your site. \n\nTo get the most out of UTM tags and campaign tracking, please see our documentation on how you can set up UTM tags: https://docs.woopra.com/docs/campaign-tracking","excerpt":"","slug":"why-referer-tracking-can-be-inaccurate","type":"basic","title":"Why Referer Tracking can be Inaccurate","__v":0,"parentDoc":null,"updatedAt":"2019-11-22T23:32:57.792Z","metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"5cd9c926c54b4e01f0963c59","version":"5b070ce4060bee00035d8d12","updatedAt":"2022-01-08T01:26:30.807Z","createdAt":"2019-05-13T19:44:38.190Z","project":"58b721a1f22b830f009a0bcd","category":"5b4540b13e462a0003378e8e","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":false,"order":5,"body":"Some Woopra users see a discrepancy between their stats on Woopra and on Google Analytics. The primary reason for this discrepancy is each service’s reporting method. Woopra is committed to providing the most accurate data by showing you individual visitors and exactly how they're engaging across the omnichannel touchpoints you're tracking. \n\n## Time Window\nWoopra shows you exactly who is on your site or application, what they’re doing, and when they leave. Woopra’s reporting is accurate to the second.\n\nGoogle Analytics reports based on who has been active on your site within the last 5 minutes. That means if a visitor is reading something on your site, watching a video, or idle for more than 5 minutes, Google Analytics won’t report that they’re on your website. It also means that if a visitor left your site within the last 5 minutes, Google Analytics will inaccurately show that they’re still on.\n\n## Sampling\nAnother cause of this discrepancy is Google Analytics’ use of [sampling](https://support.google.com/analytics/answer/2637192?hl=en), which means using a subset of data. Google Analytics often uses sampling for both collecting data and generating reports based on your data. That means that Google Analytics may only be collecting data on some of your visitors and/or only using a portion of that collected data when generating your reports.\n\nWoopra never uses any kind of sampling. Since we report at the individual level, rather than simply aggregating, we always collect your full set of data. You can see the full list of current visitors in the “Live Visitors” tab and the full history of individual visitors in the “Search” tab. Woopra’s analytics reports are generated using this full set of data.\n\n## Tracking Across Multiple Devices\nLastly, some discrepancies exist between Woopra and Google Analytics as a result of the growing tendency for each person to have multiple devices (e.g. mobile, tablet, home computer, work computer etc.) from which they access the same online services.\n\nTraditional web analytics, like Google Analytics, are unable to track a user across multiple devices, so a visitor returning to the site from another device is identified as a new visitor, rather than a returning visitor. A part of the discrepancies between Woopra and Google Analytics are often a result of Google Analytics’ inability to track customers across multiple devices.\n\nWoopra is heavily focused on individual level tracking rather than device-based tracking. By capturing user activity across their devices, Woopra offers a rich and accurate narrative of their usage and sees things from the customer’s vantage point. This is especially important for customer-focused organizations, such as SaaS and e-commerce, in order to track user activity accurately across multiple platforms.\n\nFor example, you might sign up for service X from your home computer, subsequently use the service’s app on your iPad, and end up upgrading your account from your work computer. You did complete the onboarding process, but traditional web analytics reports get stuck at step 1 (signup) because they can’t identify you as the same person across all those devices. They fail to recognize that you have in fact completed steps 2 and 3 of the customer journey.","excerpt":"","slug":"why-are-my-stats-different-on-woopra-than-on-google-analytics","type":"basic","title":"Why are my stats different on Woopra than on Google Analytics?","__v":0,"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"children":[],"childrenPages":[]},{"_id":"61a7bf16b54c37006aab1d08","metadata":{"image":[],"title":"","description":""},"api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"next":{"description":"","pages":[]},"title":"Campaign and Referrer Data: What's the difference?","updates":[],"type":"basic","slug":"campaign-and-referrer-data-whats-the-difference","excerpt":"Understand the difference and when to use campaign and referrer data.","body":"Analyzing where a user came from and how they landed on your site can be done in different ways depending on your data and what you want to analyze. In this section, we'll break down some scenarios and help define when to use certain Woopra fields such as \"campaign source\" or \"referrer type\" to get the most accurate data. \n\n#What is the difference between URL and URI in Woopra?\nURL and URI can differ depending on the platform you're using. However, in Woopra, we define URL as anything after the domain name. For example, if you visit the page \"https://www.woopra.com/learn,\" the URL field in Woopra would be '/learn'. The URI in Woopra is the complete address including the 'https'. \n\n#What is referrer data?\nWikipedia states:\n\"*In HTTP, 'referrer' is the name of an optional HTTP header field that identifies the address of the web page (i.e., the URI or IRI), which is linked to the resource being requested. By checking the referrer, the server providing the new web page can see where the request originated.*\n\n*In the most common situation, this means that when a user clicks a hyperlink in a web browser, causing the browser to send a request to the server holding the destination web page, the request may include the Referer field, which indicates the last page the user was on (the one where they clicked the link).*\"\n\nIn other words, Woopra will attempt to pull this referrer data that's stored in the user's browser (if available) and we'll use that referrer URI to determine the Woopra field 'referrer URL' and ['referrer type'](https://docs.woopra.com/docs/generated-visit-properties#referrer-types). There is logic on our backend that determines the referrer type based on rules such as: if referrer URI contains \"google.com\" then type is \"search.\"\n\nYou can read more on [Why Referrer Tracking can be Inaccurate](doc:why-referer-tracking-can-be-inaccurate), but the main point is that tracking applications are not always able to pull referrer data from the user's browser. Typically, this field should be used as a general sense of where users are coming from and not a definitive answer. \n \n#What is campaign data?\nThe \"Campaign\" fields you'll find in Woopra are based on extracting UTM data from the URIs of pageviews on your site. Check out our [Campaign Tracking](doc:campaign-tracking) doc to help understand how to create UTM links. \n\nWhen a visitor clicks on an ad you created, we always recommend using UTM tags when creating **all** external links to your site (paid or not). This way, when a user lands on your page containing UTM tags, they'll land on a page that looks like: \n\n\"http://www.yourwebsite.com/?utm_campaign=promo&utm_source=facebook&utm_medium=web_paid_ppc&utm_content=banner\"\n\nCampaign data will **always** be more accurate since it's not relying on referrer data (which may or may not exist) since the URI is always recorded on pageview events in Woopra. When a URI is recorded on a pageview event, Woopra will automatically extract the UTM data into separate fields under \"Campaigns.\"\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/5fa918f-Image_2021-12-01_at_10.24.42_AM.jpg\",\n \"Image 2021-12-01 at 10.24.42 AM.jpg\",\n 1299,\n 386,\n \"#ecebf5\"\n ],\n \"caption\": \"All of these \\\"campaign\\\" fields are extracted from utm_campaign, utm_source, etc.\"\n }\n ]\n}\n[/block]\n#When should I use campaign data or referrer data?\nSince not all external links can contain UTM data (such as search engine traffic), it's often best to either focus on general traffic trends or campaign data. More often than not, paid campaigns will contain UTM tags so using Woopra's Campaign fields should be used to analyze paid campaign performance. Since there are several UTM tags you can define such as 'utm_medium', you can specify whether the link was paid or not (like in our example UTM link \"http://www.yourwebsite.com/?utm_campaign=promo&utm_source=facebook&utm_medium=web_paid_ppc&utm_content=banner\"). This makes it easy to analyze specific campaigns and differentiate between paid and non-paid UTM traffic. \n\nReferrer fields should be used to analyze general traffic trends if UTM data isn't available. Since many new browsers might block referrer data, you'll often see a lot of \"direct\" ['referrer type'](https://docs.woopra.com/docs/generated-visit-properties#referrer-types) traffic. This can mean there was no referrer data for the pageview visit. \n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"If you're on Woopra's Pro plan, you can also create [Custom Action Schema Properties](doc:custom-schema-properties) that can combine campaign data and referrer data using [Formulas](doc:operations). For example, we could create a formula that says, if campaign data exists for a recorded pageview event, use 'campaign source' and if not, use the 'referrer type'. If you need helps with formulas, please reach out to our support team and we'll be happy to assist in creating these.\",\n \"title\": \"\"\n}\n[/block]\n#Breakdown of Woopra Campaign and Referrer fields\n\n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"Woopra Field\",\n \"h-1\": \"Description\",\n \"h-2\": \"Example\",\n \"0-0\": \"Referrer Type\",\n \"0-1\": \"Uses the most recent referrer for an action. Uses the referrer URL to determine the [\\\"type\\\"](https://docs.woopra.com/docs/generated-visit-properties#referrer-types)\",\n \"0-2\": \"direct, internal, search, backlink, social, email, PPC\",\n \"1-0\": \"First Referrer Type\",\n \"1-1\": \"Saves the first ever referrer type recorded for the user\",\n \"1-2\": \"direct, internal, search, backlink, social, email, PPC\",\n \"2-0\": \"Referrer URL\",\n \"2-1\": \"Uses the most recent referrer URL for an action if available\",\n \"2-2\": \"https://www.somepage.com\",\n \"3-0\": \"Campaign Name\",\n \"3-1\": \"Extracts 'utm_campaign=' from the pageview URI that Woopra records. The name of the campaign.\",\n \"3-2\": \"campaign xyz\",\n \"4-0\": \"Campaign Source\",\n \"5-0\": \"Campaign Medium\",\n \"6-0\": \"Campaign Content\",\n \"7-0\": \"Campaign Term\",\n \"8-0\": \"Campaign ID\",\n \"4-1\": \"Extracts 'utm_source=' from the pageview URI that Woopra records. Typically where the ad was displayed.\",\n \"5-1\": \"Extracts 'utm_medium=' from the pageview URI that Woopra records. Typically the type of ad.\",\n \"6-1\": \"Extracts 'utm_content=' from the pageview URI that Woopra records. Typically used if running similar ads.\",\n \"7-1\": \"Extracts 'utm_term=' from the pageview URI that Woopra records. Typically associated with Google Adwords or search/keyword terms.\",\n \"8-1\": \"Extracts 'utm_id=' from the pageview URI that Woopra records. Some campaigns might have an ID\",\n \"4-2\": \"google, facebook, instagram, etc.\",\n \"5-2\": \"web, paid, email, tweet, etc.\",\n \"6-2\": \"topbanner, rightsidebanner, specific_location, temporarysale, etc.\",\n \"7-2\": \"running+shoes, journey+analytics, coffee+cups, etc.\",\n \"8-2\": \"id_xyz\",\n \"9-0\": \"First Campaign Name, Source, Medium, etc.\",\n \"9-1\": \"Saves the first recorded visit that contained UTM tags. Note that the first ever visit from a user might not have UTM tags, but this will still record the first instance if there is one later on.\",\n \"9-2\": \"See above examples.\"\n },\n \"cols\": 3,\n \"rows\": 10\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Notes:\",\n \"body\": \"Campaign data can also be associated with other events other than pageview events such as some email events or other custom actions. This will depend on how you're sending these events to Woopra.\"\n}\n[/block]","order":6,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-11-30T18:53:00.241Z","createdAt":"2021-12-01T18:29:42.814Z","updatedAt":"2021-12-02T08:10:45.603Z","user":"5adfa297452bd900036d0f67","category":"5b4540b13e462a0003378e8e","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","__v":0,"parentDoc":null,"children":[],"childrenPages":[]},{"_id":"623239298aab1a002ff4526a","metadata":{"image":[],"title":"","description":""},"api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"next":{"description":"","pages":[]},"title":"Queued Events","updates":[],"type":"basic","slug":"queued-events","excerpt":"","body":"When sending events to Woopra, you may see a response code of \"queued\" which can affect some functionality such as our automation [Inject Script](doc:triggers). \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/65460e3-Image_2022-03-24_at_12.39.30_PM.jpg\",\n \"Image 2022-03-24 at 12.39.30 PM.jpg\",\n 2488,\n 2148,\n \"#f4f5f8\"\n ]\n }\n ]\n}\n[/block]\nInject Script is a trigger action that will inject script on the user's browser, based on their actions. We return the script that you wrote in the response from our servers after a track event is sent from the client-side. If a run script isn't working, you may be receiving a \"queued\" response. If the event is queued, then we'll still receive the tracking request, but the run script may not fire. \n\n##Reasons for \"queued\" Response\nWhen a run script is set up, there are several factors that may affect performance which could cause the event to be queued instead of returning the script. \n\nDepending on the complexity of your setup, Woopra needs to check several data points before we return a response with the inject script code. Things such as [Segmentation Filters](doc:segmentation-filters) and segment join/leave events, [Visitor Schema - Formulas](doc:custom-visitor-schema-properties), [Visitor Schema - Profile Metrics](doc:visitor-schema-profile-metrics), and other [Triggers](doc:triggers) and automation.\n\nAdditionally, large profiles with a lot of events, and calculated \"lifetime\" fields such as custom [Visitor Schema - Profile Metrics](doc:visitor-schema-profile-metrics) that are counting some lifetime metic such as total spent or counts of total actions all must be checked before a inject script returns a response. \n\nAll these factors contribute to the time it takes to successfully return a response from our servers. If the time it takes is too long, we'll return the \"queued\" response. \n\n##Suggested Solutions\nTo speed up the processing of these triggers, there are several variables to consider. \n\n * Limit the number of [segment join/leave events](https://docs.woopra.com/docs/how-to-create-segments#make-visible-and-track-actions)\n * Limitlifetime fields such as lifetime counts and sums that must scan complete profile histories\n * Limit the number of inject script triggers\n * Make sure there are no infinite loops that may be causing profiles to be too large. i.e. profiles with too many events or duplicate events\n * Limit triggers that update visitor properties\n\n\n[block:callout]\n{\n \"type\": \"warning\",\n \"title\": \"Still having issues?\",\n \"body\": \"Please reach out to [email protected].\"\n}\n[/block]","order":999,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2022-03-16T18:23:51.930Z","createdAt":"2022-03-16T19:23:21.192Z","updatedAt":"2022-03-24T20:18:11.786Z","user":"5adfa297452bd900036d0f67","category":"5b4540b13e462a0003378e8e","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","__v":0,"parentDoc":null,"children":[],"childrenPages":[]}]},{"_id":"60c3e9d4f2a874002a8dae8b","title":"Advanced Reporting","slug":"advanced-reporting","order":9999,"reference":false,"isAPI":false,"project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","createdAt":"2021-06-11T22:55:16.979Z","__v":0,"pages":[{"_id":"60c3f87f76ef590064c85747","metadata":{"image":[],"title":"","description":""},"api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"next":{"description":"","pages":[]},"title":"URL Variables","updates":[],"type":"basic","slug":"url-variables","excerpt":"Create URL links to reports that include custom variables to inject into report filters.","body":"If you use an external CRM or you would like to create links to reports, you can create custom variables in the report URLs to inject into the report constraints. For example, say you want to dynamically create links for your sales team to show the history of a particular user who does a particular action. \n\nIn this example, you can first create the report and use it as a template for your links. I created a new [Activity Report](doc:activity-reports) and copied the link and saved the report. \n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/9570dd8-Image_2021-06-11_at_4.48.58_PM.png\",\n \"Image 2021-06-11 at 4.48.58 PM.png\",\n 2096,\n 748,\n \"#f1eff6\"\n ],\n \"caption\": \"I've added the Performed by, Actions, and columns I want for the report, but I haven't configured any specific constraints or filters yet. Just the template for the Report.\"\n }\n ]\n}\n[/block]\nOnce I have the link, I can edit the URL and add custom variables that I can use in the filtering of the report.\n\nIn this example, I want to create a link with two variables: 'var.email' and 'var.report'. The link will look something like this: \n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"https://app.woopra.com/project/woopra.com/activity/njsino4cl0?var.email=&var.report=\",\n \"language\": \"text\"\n }\n ]\n}\n[/block]\nThe part I added to the link is {?var.email=&var.report=}. You must name the variables in this format {var.name=} which the {var.} is needed before the variable name. Once you're done editing the URL, go to the URL you've created in your browser. You can now select the variables in your report filters. \n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/1bcd7f2-Image_2021-06-11_at_4.02.29_PM.png\",\n \"Image 2021-06-11 at 4.02.29 PM.png\",\n 1084,\n 440,\n \"#e0e7f5\"\n ],\n \"caption\": \"Here in the Performed by filter, I can now select the created variable for 'var.email' that I created.\"\n }\n ]\n}\n[/block]\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/70b413f-Image_2021-06-11_at_4.02.38_PM.png\",\n \"Image 2021-06-11 at 4.02.38 PM.png\",\n 1118,\n 590,\n \"#e3e8f4\"\n ],\n \"caption\": \"I also wanted to filter on a specific report type by using the other variable 'var.report' so I can select to filter on that variable in the action constraints.\"\n }\n ]\n}\n[/block]\nFinally, I can now inject any values into those links and the report will automatically filter on the variables. For example, I could dynamically create links in my CRM for my sales team so they don't have to manually configure the report. \n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"https://app.woopra.com/project/woopra.com/activity/[email protected]&var.report=trends\\n\",\n \"language\": \"text\"\n }\n ]\n}\n[/block]\nNow, when I go to this link, I can see the report is using the values for the custom variables. \n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/d80418c-Image_2021-06-11_at_4.32.39_PM.png\",\n \"Image 2021-06-11 at 4.32.39 PM.png\",\n 2084,\n 1152,\n \"#f3f2f7\"\n ]\n }\n ]\n}\n[/block]","order":0,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-06-11T22:01:59.083Z","createdAt":"2021-06-11T23:57:51.033Z","updatedAt":"2021-06-28T22:07:23.497Z","user":"5adfa297452bd900036d0f67","category":"60c3e9d4f2a874002a8dae8b","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","__v":0,"parentDoc":null,"children":[],"childrenPages":[]}]}],"refs":[{"_id":"5b070ce4060bee00035d8c8a","isAPI":false,"order":0,"slug":"serverside-sdks","__v":0,"createdAt":"2017-03-03T22:23:32.186Z","from_sync":false,"project":"58b721a1f22b830f009a0bcd","reference":true,"title":"Server and Mobile Tracking SDK's","version":"5b070ce4060bee00035d8d12","pages":[{"_id":"5b070ce4060bee00035d8c9f","createdAt":"2017-03-03T22:23:51.671Z","githubsync":"","link_external":false,"parentDoc":null,"body":"The tracking SDKs are small packages with convenience functions written in different languages. Essentially, they wrap the [HTTP Tracking API](ref:intro-http-tracking), which is the core of all tracking in Woopra.\n\nThe most detailed general tutorial for tracking SDKs can be found in the [Browser Javascript API](ref:the-javascript-snippet) . However, some functionalities, such as the ping, are not supported in the serverside SDKs.\n\nThe SDK's listed on the left in this section are all links to the Github repositories. The most up-to-date docs are in the README.md file in the base directory of those repositories. You can get there by clicking the appropriate SDK in the list on the left.\n\n##Contributing\nPlease do contribute! We are a fairly small developer team here at Woopra, and sometimes there are no experts in-house in, say, PHP or Objective-C. We may not be able to quickly update our Python SDK for Python 3 or get our iOS SDK tracking the new device types correctly. So yeah, we love merging pull requests! (Including updating the README!) And since everything is basically an abstraction above the [tracking api](ref:intro-http-tracking), developing on the SDK's is straightforward and easy.\n\n### **Issues?** Last Resort:\nIf your use case just isn't supported in our SDK's or it is but the SDK won't work with your setup or for your needs, the last resort should always be to simply use the [HTTP Tracking API](ref:intro-http-tracking) directly.","isReference":true,"next":{"pages":[],"description":""},"slug":"getting-started-with-tracking-sdks","title":"Intro: Tracking SDK's","updates":[],"version":"5b070ce4060bee00035d8d12","api":{"results":{"codes":[{"language":"json","code":"{}","name":"","status":200},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"excerpt":"","link_url":"","order":0,"project":"58b721a1f22b830f009a0bcd","category":"5b070ce4060bee00035d8c8a","hidden":false,"type":"basic","user":"5adfa297452bd900036d0f67","__v":0,"sync_unique":"","updatedAt":"2022-03-01T19:13:50.710Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"deprecated":false,"previousSlug":"","slugUpdatedAt":"2022-03-01T18:26:15.807Z","children":[],"childrenPages":[]},{"_id":"5b070ce4060bee00035d8ca6","sync_unique":"","type":"link","updates":[],"excerpt":"","hidden":false,"project":"58b721a1f22b830f009a0bcd","next":{"pages":[],"description":""},"parentDoc":null,"title":"iOS SDK","user":"5a57f4cd42c0fe001c136f06","__v":0,"category":"5b070ce4060bee00035d8c8a","createdAt":"2017-03-07T22:49:56.480Z","link_external":false,"version":"5b070ce4060bee00035d8d12","body":"","githubsync":"","isReference":true,"link_url":"https://github.com/Woopra/Woopra-iOS","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"order":1,"slug":"ios-sdk","updatedAt":"2019-09-27T19:55:49.002Z","metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"5b070ce4060bee00035d8ca7","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"parentDoc":null,"sync_unique":"","version":"5b070ce4060bee00035d8d12","__v":0,"user":"560a2cc087b71d0d000d3a44","next":{"description":"","pages":[]},"title":"Android SDK","body":"[block:embed]\n{\n \"html\": false,\n \"url\": \"https://github.com/Woopra/woopra-android-sdk/blob/master/README.md\",\n \"title\": \"Woopra/woopra-android-sdk\",\n \"favicon\": \"https://assets-cdn.github.com/favicon.ico\",\n \"image\": \"https://avatars1.githubusercontent.com/u/2079353?v=3&s=400\",\n \"iframe\": false,\n \"width\": \"100%\",\n \"height\": \"300px\"\n}\n[/block]","category":"5b070ce4060bee00035d8c8a","hidden":false,"isReference":true,"link_external":false,"link_url":"https://github.com/Woopra/woopra-android-sdk","type":"link","updates":[],"createdAt":"2017-03-07T22:50:06.968Z","excerpt":"Software Development Kit for Android Apps","githubsync":"","order":2,"project":"58b721a1f22b830f009a0bcd","slug":"android-sdk","updatedAt":"2019-09-27T19:55:49.002Z","metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"5b070ce4060bee00035d8ca8","category":"5b070ce4060bee00035d8c8a","isReference":true,"user":"560a2cc087b71d0d000d3a44","version":"5b070ce4060bee00035d8d12","api":{"method":"get","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"language":"json","code":"{}","name":"","status":400}]},"auth":"required","params":[],"url":""},"body":"","createdAt":"2017-03-07T22:57:55.491Z","link_external":false,"link_url":"https://github.com/Woopra/woopra-php-sdk","parentDoc":null,"__v":0,"excerpt":"","githubsync":"","next":{"pages":[],"description":""},"slug":"php-sdk","type":"link","updates":[],"hidden":false,"order":3,"project":"58b721a1f22b830f009a0bcd","sync_unique":"","title":"PHP SDK","updatedAt":"2019-09-27T19:55:49.003Z","metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"5b070ce4060bee00035d8ca9","updates":[],"createdAt":"2017-03-07T22:58:30.997Z","hidden":false,"slug":"nodejs-sdk","sync_unique":"","title":"Node.js SDK","type":"link","user":"560a2cc087b71d0d000d3a44","body":"","category":"5b070ce4060bee00035d8c8a","excerpt":"","isReference":true,"link_external":false,"next":{"pages":[],"description":""},"api":{"results":{"codes":[{"name":"","status":200,"language":"json","code":"{}"},{"language":"json","code":"{}","name":"","status":400}]},"auth":"required","params":[],"url":"","method":"get"},"link_url":"https://github.com/woopra/node-woopra","order":4,"project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","__v":0,"githubsync":"","parentDoc":null,"updatedAt":"2019-09-27T19:55:49.003Z","metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"5b070ce4060bee00035d8caa","api":{"params":[],"url":"","method":"get","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required"},"order":5,"parentDoc":null,"sync_unique":"","__v":0,"body":"","createdAt":"2017-03-07T22:58:55.925Z","githubsync":"","isReference":true,"title":"Java SDK","user":"560a2cc087b71d0d000d3a44","category":"5b070ce4060bee00035d8c8a","excerpt":"","link_external":false,"link_url":"https://github.com/Woopra/woopra-java-sdk","type":"link","updates":[],"hidden":false,"next":{"pages":[],"description":""},"project":"58b721a1f22b830f009a0bcd","slug":"java-sdk","version":"5b070ce4060bee00035d8d12","updatedAt":"2019-09-27T19:55:49.004Z","metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"5b070ce4060bee00035d8cab","link_external":false,"link_url":"https://github.com/Woopra/woopra-django-sdk","version":"5b070ce4060bee00035d8d12","__v":0,"createdAt":"2017-03-07T22:59:20.443Z","next":{"pages":[],"description":""},"order":6,"updates":[],"user":"560a2cc087b71d0d000d3a44","api":{"url":"","method":"get","results":{"codes":[{"name":"","status":200,"language":"json","code":"{}"},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[]},"body":"","excerpt":"","isReference":true,"slug":"django-sdk","type":"link","category":"5b070ce4060bee00035d8c8a","githubsync":"","hidden":false,"parentDoc":null,"project":"58b721a1f22b830f009a0bcd","sync_unique":"","title":"Django SDK","updatedAt":"2019-09-27T19:55:49.004Z","metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"5b070ce4060bee00035d8cac","body":"","sync_unique":"","type":"link","updates":[],"category":"5b070ce4060bee00035d8c8a","createdAt":"2017-03-07T22:59:47.921Z","githubsync":"","isReference":true,"project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","__v":0,"link_external":false,"link_url":"https://github.com/Woopra/woopra-python-sdk","next":{"description":"","pages":[]},"order":7,"parentDoc":null,"title":"Python SDK","user":"560a2cc087b71d0d000d3a44","api":{"results":{"codes":[{"code":"{}","name":"","status":200,"language":"json"},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"excerpt":"","hidden":false,"slug":"python-sdk","updatedAt":"2019-09-27T19:55:49.005Z","metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"5b070ce4060bee00035d8cad","project":"58b721a1f22b830f009a0bcd","createdAt":"2017-03-07T23:00:01.839Z","isReference":true,"order":8,"sync_unique":"","title":"Ruby on Rails SDK","type":"link","version":"5b070ce4060bee00035d8d12","excerpt":"","githubsync":"","link_external":false,"link_url":"https://github.com/Woopra/woopra-rails-sdk","next":{"description":"","pages":[]},"parentDoc":null,"slug":"ruby-on-rails-sdk","api":{"params":[],"url":"","method":"get","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"language":"json","code":"{}","name":"","status":400}]},"auth":"required"},"body":"","category":"5b070ce4060bee00035d8c8a","hidden":false,"updates":[],"user":"560a2cc087b71d0d000d3a44","__v":0,"updatedAt":"2019-09-27T19:55:49.005Z","metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]}]},{"_id":"5d38e3c94c6ef200427da8ec","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","isAPI":false,"reference":true,"createdAt":"2019-07-24T23:03:37.236Z","order":1,"slug":"browse-javascript-api","title":"Browse Javascript API","__v":0,"pages":[{"_id":"5d38e3fa16c4a00018e5f2a5","version":"5b070ce4060bee00035d8d12","updatedAt":"2019-09-27T19:55:49.005Z","createdAt":"2019-07-24T23:04:26.009Z","project":"58b721a1f22b830f009a0bcd","category":"5d38e3c94c6ef200427da8ec","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":true,"order":0,"body":"The Javascript Tracking API is the primary way to get data into Woopra from your website or product. The API code is loaded in the browser as the result of running the [Javascript Snippet](ref:the-javascript-snippet). \n\nTo use and master this simple but crucial API, perform the below tasks to understand Woopra's tracking methodology and concepts:\n\n* Learn about [the snippet](ref:the-javascript-snippet) and how to place it appropriately in your code.\n* Determine what should go in your [tracker config](ref:woopraconfig) and place a call to `woopra.config()` right under your snippet. At the minimum, this must include your project name.\n* Learn the [`woopra.track()`](ref:woopratrack) function, and how to use it to track your own [custom actions](https://dash.readme.io/project/woopra/docs/custom-actions-and-visitor-data). This may include determining what events are important for your business to track. See [What do I track?](doc:what-do-i-track).\n* Learn the [`woopra.identify()`](ref:woopraidentify) function, and how to use it to set [visitor properties](doc:visitor-properties) on visitor profiles. Also, learn how Woopra associates return sessions with previously-seen visitors using [Unique Identifiers and Profile Merging](doc:unique-identifiers-and-profile-merging).\nThe Woopra JavaScript tracking code is designed for easy customization. It can be tailored to identify website visitors and track any custom user actions across your website or application.\n\nThe functions available return the Woopra tracking object in the browser, so you can chain methods: \n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"window.woopra.identify('[email protected]').track('my_event', {\\n eventProp1: 'event prop value'\\n})\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]","excerpt":"","slug":"intro-javascript-api","type":"basic","title":"Intro: Javascript API","__v":0,"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"5d38e422f509d10027b18745","version":"5b070ce4060bee00035d8d12","updatedAt":"2021-12-29T19:56:18.735Z","createdAt":"2019-07-24T23:05:06.282Z","project":"58b721a1f22b830f009a0bcd","category":"5d38e3c94c6ef200427da8ec","user":"560a301e109fc70d00008bad","updates":[],"next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":true,"order":1,"body":"The Javascript Snippet is a small function placed on your webpage to initialize the Woopra tracking object and to asynchronously load the Woopra tracker code. It's typically placed in the `<head>` of your document. It's important to keep in mind that the Woopra tracking code runs asynchronously. This means that Woopra will load in the background while your page elements load, therefore it will not slow down the performance of your website or application.\n\nIt Snippet also defines the tracker's methods so that you can immediately set the configuration and call `track()` and `identify()`, and it will queue those calls and run them when the tracker loads.\n[block:api-header]\n{\n \"title\": \"Using the Snippet\"\n}\n[/block]\n##The Pure Snippet Function\nThere are multiple ways in which you can customize the Javascript Snippet. Here we'll go over some general best practices. \n\nBelow is the raw javascript snippet:\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"!function(){var t,o,c,e=window,n=document,r=arguments,a=\\\"script\\\",i=[\\\"call\\\",\\\"cancelAction\\\",\\\"config\\\",\\\"identify\\\",\\\"push\\\",\\\"track\\\",\\\"trackClick\\\",\\\"trackForm\\\",\\\"update\\\",\\\"visit\\\"],s=function(){var t,o=this,c=function(t){o[t]=function(){return o._e.push([t].concat(Array.prototype.slice.call(arguments,0))),o}};for(o._e=[],t=0;t<i.length;t++)c(i[t])};for(e.__woo=e.__woo||{},t=0;t<r.length;t++)e.__woo[r[t]]=e[r[t]]=e[r[t]]||new s;(o=n.createElement(a)).async=1,o.src=\\\"https://static.woopra.com/w.js\\\",(c=n.getElementsByTagName(a)[0]).parentNode.insertBefore(o,c)}(\\\"woopra\\\");\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nThe snippet is an immediately-invoked function expression that asynchronously loads the javascript tracking SDK code in the browser. It also prepares some queueing so that you can make calls to the methods before the tracking code finishes loading, and will evaluate those calls when it finishes loading.\n\nThis is the minimum requirement to add to the webpage code in order to make the Woopra tracker function, however, adding this will not track any events. Rather, it will expose the `config()`, `track()`, `identify()`, `push()`, `call()`, `trackClick()`, `trackForm()`, `update()`, and `visit()` functions for you to use in your client-side javascript. \n\nTo see any data in Woopra, you need to make a call to `woopra.config()` to tell the tracker object the name of your project, and a call to `woopra.track()` to actually track an event in Woopra.\n\n##A Common Snippet and Tracking Implementation\nBelow is an example of installation inside the `<head>` of a website. It will install the tracker on every page load and track a standard built-in pageview. (See [woopra.track()](ref:woopratrack) for more on sending the default pageview event, and [Built-in Events](doc:built-in-events) for more on built-in events in general.) \n\nOne thing to note is that if you have a Single Page Application, the `<head>` section of the page may only be rendered once, thus only tracking a single pageview when in fact your visitor may perform many different app views in your web app. See our [SPAs](doc:spas) for more info on this.\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<head>\\n <!-- ... Your head code -->\\n <script>\\n /*\\n * Initialize tracker object on page and create queues for function calls\\n * and async load tracker.\\n */\\n !function(){var t,o,c,e=window,n=document,r=arguments,a=\\\"script\\\",i=[\\\"call\\\",\\\"cancelAction\\\",\\\"config\\\",\\\"identify\\\",\\\"push\\\",\\\"track\\\",\\\"trackClick\\\",\\\"trackForm\\\",\\\"update\\\",\\\"visit\\\"],s=function(){var t,o=this,c=function(t){o[t]=function(){return o._e.push([t].concat(Array.prototype.slice.call(arguments,0))),o}};for(o._e=[],t=0;t<i.length;t++)c(i[t])};for(e.__woo=e.__woo||{},t=0;t<r.length;t++)e.__woo[r[t]]=e[r[t]]=e[r[t]]||new s;(o=n.createElement(a)).async=1,o.src=\\\"https://static.woopra.com/w.js\\\",(c=n.getElementsByTagName(a)[0]).parentNode.insertBefore(o,c)}(\\\"woopra\\\"); /*This function is invoked with the tracker object name. You can change this if you like. See below*/\\n\\n /*\\n * - There are many options you can pass here to configure the tracker.\\n * - The only required option to set is your project name \\n * in the \\\"domain\\\" property\\n */\\n woopra.config({\\n domain: \\\"mybusiness.com\\\" // This is the minimum required config\\n });\\n\\n // track pageview\\n woopra.track(); // With no arguments, the track funciton will track a default pageview event. See docs for woopra.track() function\\n </script>\\n \\n <!-- ... More of Your head code ... -->\\n</head>\",\n \"language\": \"html\"\n }\n ]\n}\n[/block]\nRemember, the snippet on line six above is what loads the Woopra object onto the `window`. The calls to `woopra.track()` etc. are using the `woopra` object that the snippet loaded.\n[block:api-header]\n{\n \"title\": \"What's the difference between the snippet and the tracker?\"\n}\n[/block]\nIt's important to understand the difference between the Snippet and the Tracker. The Snippet is a short simple function that loads the Tracker. The Tracker Object itself is the javascript code that sends events into Woopra. \n\nOnce installed, the snippet should never need to be changed or be updated. The snippet loads the Tracker code itself from the Woopra servers. The Tracker code may change at times based on new security concerns on the web, or new features that we may add. But when this happens, you don't have to change anything in your page to get the new tracker and features, because the snippet code loads the newest version of the tracker every time the web page is loaded on a visitor's browser. \n[block:api-header]\n{\n \"title\": \"Changing the name of the tracker object\"\n}\n[/block]\nThe Snippet function takes one parameter: a string which will be the name of the tracker object on the window object. In the examples above, the string `\"woopra\"` is passed as the argument. This means that your tracker will be available on the browser at `window.woopra`. You can alter this if you wish. You can pass any valid javascript object parameter key string here. For example, if you want to access the tracker at `window.tracker`, you can invoke your snippet with `\"tracker\" as the argument.\n[block:api-header]\n{\n \"title\": \"When Can I Call `woopra.track()`?\"\n}\n[/block]\nThe snippet begins the asynchronous task of downloading the latest Woopra tracker object, and installing it onto the window object. Because this is asynchronous, the next line that runs after the snippet is guaranteed to be executed before the tracker is loaded. That is why part of what the snippet does is prepare a set of task queues to be run once the tracker loads. \n\nSo you can call `woopra.track()` immediately after the line in which you place the snippet. But the tracking data will not be sent before the Woopra tracker is loaded.\n\nIf you need a callback to know when the tracker has actually completed loading, you should put a callback in your first call to `woopra.track()`. See the [woopra.track()](ref:woopratrack) docs for more info.","excerpt":"","slug":"the-javascript-snippet","type":"basic","title":"The Javascript Snippet","__v":0,"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-09-17T20:49:09.947Z","deprecated":false,"children":[],"childrenPages":[]},{"_id":"61453bdc92753a00109c9833","metadata":{"image":[],"title":"","description":""},"api":{"method":"get","url":"","auth":"required","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"params":[]},"next":{"description":"","pages":[]},"title":"woopra.config()","updates":[],"type":"basic","slug":"woopraconfig","excerpt":"","body":"The `config` function is used to tell the tracker which project you're tracking. It also allows you to set a number of options that can affect your default pageview tracking (`woopra.track()` No Args!!), the behavior, domains, and locations of cookies, how [the ping](ref:the-ping) works, etc.\n\nThe `config` function supports key/value singleton argument:\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.config(\\\"cookie_name\\\", \\\"my_business_cookie\\\");\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nOr an object of keys and values:\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.config({\\n download_tracking: true,\\n outgoing_tracking: true,\\n click_tracking: true\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n# Auto tracking Configs\n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"Options\",\n \"h-1\": \"Value\",\n \"h-2\": \"Description\",\n \"0-0\": \"`download_tracking`\",\n \"0-1\": \"`true`\",\n \"0-2\": \"Automatically tracks downloads. See below note\",\n \"1-0\": \"`outgoing_tracking`\",\n \"1-1\": \"`true`\",\n \"1-2\": \"Automatically tracks outgoing link clicks\",\n \"2-0\": \"`click_tracking`\",\n \"2-1\": \"`true`\",\n \"2-2\": \"Automatically tracks button clicks\"\n },\n \"cols\": 3,\n \"rows\": 3\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"info\",\n \"title\": \"Note on 'download_extentions'\",\n \"body\": \"The default list is: avi, css, dmg, doc, eps, exe, js, m4v, mov, mp3, mp4, msi, pdf, ppt, rar, svg, txt, vsd, vxd, wma, wmv, xls, xlsx, zip\\n\\nIf you override the default, you this stops using our default list. You can use our list and include others like:\\n\\n```js\\nwoopra.config({\\n domain: 'woopra.com',\\n initialized: function () {\\n woopra.config(\\n 'download_extensions',\\n woopra.config('download_extensions').concat('xml')\\n );\\n }\\n});\\n```\"\n}\n[/block]\n\n[block:api-header]\n{\n \"type\": \"basic\",\n \"title\": \"Configuring your Tracker\"\n}\n[/block]\nThe Woopra tracker can be customized using the config function. The config options have some defaults for normal website tracking and with the exception of \"`domain`\", can usually be left un-customized.\n\nThe tracker will not work, however without a `domain` which is your project name in Woopra.\n\nFind the list of options below:\n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"Option\",\n \"h-1\": \"Default\",\n \"h-2\": \"Description\",\n \"0-0\": \"`domain`\",\n \"0-1\": \"N/A (required)\",\n \"0-2\": \"<strong>Required</strong> Project name in Woopra. Must be explicitly set for tracker to work.\",\n \"1-0\": \"`cookie_name`\",\n \"1-1\": \"`wooTracker`\",\n \"1-2\": \"Name of the cookie used to identify the visitor\",\n \"2-0\": \"`cookie_domain`\",\n \"2-1\": \"Website domain\",\n \"2-2\": \"Domain scope of the Woopra cookie. Use `.domain.com` to share the cookie across subdomains.\",\n \"3-0\": \"`cookie_path`\",\n \"3-1\": \"`/`\",\n \"3-2\": \"Directory scope of the Woopra cookie.\",\n \"4-0\": \"`cookie_expire`\",\n \"4-1\": \"`new Date(new Date().setFullYear(new Date().getFullYear() + 2))` (2 years from now)\",\n \"4-2\": \"Expiration date (javascript Date object) of the Woopra cookie\",\n \"6-0\": \"`ping`\",\n \"6-1\": \"`false`\",\n \"6-2\": \"**Deprecated.** Ping woopra servers to ensure that the visitor is still on the webpage\",\n \"7-0\": \"`ping_interval`\",\n \"7-1\": \"`12000`\",\n \"7-2\": \"**Deprecated.** Time interval in milliseconds between each ping\",\n \"8-0\": \"`idle_timeout`\",\n \"8-1\": \"`300000` (5 minutes)\",\n \"8-2\": \"Idle time (in milliseconds) after which the user is considered offline\",\n \"9-0\": \"`download_tracking`\",\n \"9-1\": \"`false`\",\n \"9-2\": \"Track downloads on the web page\",\n \"10-0\": \"`download_extensions`\",\n \"10-1\": \"`['pdf', 'zip', ...]`\",\n \"10-2\": \"Overrides default list. [See the note above for default extensions and ways to override the list.](https://docs.woopra.com/reference/woopraconfig#auto-tracking-configs)\",\n \"11-0\": \"`outgoing_tracking`\",\n \"11-1\": \"`false`\",\n \"11-2\": \"Track external links clicks on the web page\",\n \"12-0\": \"`outgoing_ignore_subdomain`\",\n \"12-1\": \"`true`\",\n \"12-2\": \"Do not track links to subdomains as outgoing links\",\n \"13-0\": \"`ignore_query_url`\",\n \"13-1\": \"`true`\",\n \"13-2\": \"Ignores the query part of the url when the standard pageviews tracking function (`track()` with no args) is called\",\n \"14-0\": \"`map_query_params`\",\n \"14-1\": \"`{}`\",\n \"14-2\": \"Object with URL parameter keys mapped to action property names. (e.g.`{ ref: \\\"campaign_name\\\" }`)\",\n \"15-0\": \"`hide_campaign`\",\n \"15-1\": \"`false`\",\n \"15-2\": \"Enabling this option will remove campaign properties from the URL when they’re captured (using HTML5 `pushState`)\",\n \"5-0\": \"`protocol`\",\n \"5-1\": \"`https`\",\n \"5-2\": \"The protocol used to contact Woopra servers. `http://` forces unsecure mode and `//` follows the page's protocol.\"\n },\n \"cols\": 3,\n \"rows\": 16\n}\n[/block]","order":2,"isReference":true,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"pendingAlgoliaPublish":false,"previousSlug":"woopraconfig-new","slugUpdatedAt":"2021-09-21T18:40:37.243Z","createdAt":"2021-09-18T01:07:40.900Z","updatedAt":"2021-12-29T18:02:05.007Z","user":"560a301e109fc70d00008bad","category":"5d38e3c94c6ef200427da8ec","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","__v":0,"parentDoc":null,"deprecated":false,"children":[],"childrenPages":[]},{"_id":"5d38e48b9ee3ff00189becd3","version":"5b070ce4060bee00035d8d12","updatedAt":"2021-12-29T18:04:43.770Z","createdAt":"2019-07-24T23:06:51.028Z","project":"58b721a1f22b830f009a0bcd","category":"5d38e3c94c6ef200427da8ec","user":"560a301e109fc70d00008bad","updates":[],"next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":true,"order":3,"body":"The Woopra JavaScript tracking code is designed for easy customization. It can be tailored to identify your website visitors and track any custom events across your site or application.\n\nIn order to activate tracking by Woopra’s servers, you must insert [the javascript snippet](ref:the-javascript-snippet) into the `<head>` element on each page you wish to be tracked. Tracking occurs when a visitor’s Web browser executes the Woopra javascript and pings the Woopra servers. Custom visitor data, or custom events, can be added to Woopra and the reference below will demonstrate how this is done.\n\nJavascript code is asynchronous and should be inserted in the `<head>` tag rather than always needing to be inserted in the page footer. By placing it in the header, the pageview will be tracked before the visitor leaves the page. \n\n\n#Default Pageview Event\nCalling `woopra.track()` with no arguments sends the default built-in \"pageview\" event. Some of the options that you set in the [tracker config](ref:woopraconfig) are for this built-in event.\n\n##`woopra.track()` (No Arguments)\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"window.woopra.track();\\n \\n// The line above is equivalent to:\\nwoopra.track(\\\"pv\\\", {\\n url: window.location.pathname,\\n title: document.title\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\n#Tracking Custom Actions\nWoopra also allows you to track any type of Custom Actions in addition to pageviews. Let’s say you're running a website where visitors can signup for your service. You can track these actions using Woopra’s Custom Actions. To track custom actions, you can define the action name string and the properties associated with that action object:\n\n`woopra.track(eventName<lowercase string>, [properties]<object>, [callback]<function>)`\nor\n`woopra.track(eventName<lowercase string>, [properties]<object>, [options]<object>)`\n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"Argument\",\n \"h-1\": \"Type\",\n \"h-2\": \"Description\",\n \"0-0\": \"eventName\",\n \"0-2\": \"The name of the event that you are tracking. Should be lower case.\",\n \"0-1\": \"String\",\n \"1-0\": \"properties\",\n \"1-1\": \"Object\",\n \"1-2\": \"An object of any properties you want to track with the event.\",\n \"2-0\": \"callback\",\n \"2-1\": \"Function or Object\",\n \"2-2\": \"A callback function to run after the tracking function has been successfully received by Woopra. See below \\\"options\\\" for more details.\"\n },\n \"cols\": 3,\n \"rows\": 3\n}\n[/block]\n\n[block:callout]\n{\n \"type\": \"warning\",\n \"body\": \"It is best practice to use `_` instead of spaces. \\n\\nBut don't worry, you can always customize how events are displayed, described and aggregated throughout Woopra in your [schemas](doc:schemas). You can even create sentence templates using event property values for when an instance of the event is shown in the Woopra interface. Think: \\\"James Kirk Purchased a Starship for 1000 bitcoin\\\" from your template: `${visitor.full_name} Purchased ${action.product_name} for ${action.item_price} ${action.currency}`\",\n \"title\": \"All event names and properties should be lowercase.\"\n}\n[/block]\n###Options\nOptionally, you can pass, as the last argument to `woopra.track()` a callback function that will be called after the tracker has received the response from the tracking server. \n\nThis can be useful if you need to access Woopra labels data (at `window.woopra.labels`) but only after it has been evaluated and updated by the tracking server. \n\nYou can also use this as a callback to know not only when the snippet has loaded the tracker object, but when the very first Woopra tracking action has successfully been completed. Essentially it guarantees that the Woopra tracker object has been loaded which may be important even though you can in fact call `woopra.track()` and the other methods as soon as the snippet code has run.\n\nIn addition, the callback can be an object as well and use the following options:\n[block:parameters]\n{\n \"data\": {\n \"0-0\": \"`onError`\",\n \"h-0\": \"Callback Options as Object\",\n \"1-0\": \"`onBeforeSend`\",\n \"0-2\": \"Callback is called where there's an error during tracking\",\n \"h-2\": \"Description\",\n \"1-2\": \"Receives a WoopraAction object as an argument. For example, if you want to cancel scroll depth or update a property before send. See WoopraAction section below for more details.\",\n \"2-0\": \"`onSuccess`\",\n \"2-2\": \"Callback option, receives a WoopraAction object as an argument on success. See WoopraAction section below for more details\",\n \"0-1\": \"Callback is called where there's an error during tracking.\",\n \"1-1\": \"Receives a WoopraAction object as an argument. For example, if you want to cancel scroll depth or update a property before sending. See WoopraAction section below for more details.\",\n \"2-1\": \"Callback option, receives a WoopraAction object as an argument on success. See WoopraAction section below for more details.\",\n \"3-0\": \"`timeout`\",\n \"4-0\": \"`queue`\",\n \"3-1\": \"Option: Number. The default uses woopra.config('idle_timeout')).\",\n \"4-1\": \"When true, forces the action to be queued and sent as a beacon. \\n\\nUses navigator.sendBeacon instead of <script> tag injection to make the tracking request. \\n\\nQueued actions are flushed and sent to woopra's tracking servers every time the user closes the tab/window or switches away from the tab, navigates away from the page, woopra.push() is called, an action has been cancelled, or a file download/outgoing link/form track/click track event is captured.\",\n \"5-0\": \"`lifecycle`\",\n \"6-0\": \"`retrack`\",\n \"5-1\": \"String: `page` | `action`\\n\\nDefaults to `page` for pv, otherwise `action.`\\n\\nAs `page` lifecycles will update durations and % or page scrolling through the lifecycle of the page.\",\n \"6-1\": \"Boolean: default = false\\n\\nActions with lifecycle of page will be tracked again if the user is inactive longer than timeout. The action has the same properties with an extra `returning` property with the value of `true`.\"\n },\n \"cols\": 2,\n \"rows\": 7\n}\n[/block]\nNote that errors thrown in callbacks will be caught and logged via (console.error)\n\n####WoopraAction\nThe object returned from `onSuccess` and `onBeforeSend` callbacks. \n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"Callback\",\n \"0-0\": \"`action.id`\",\n \"h-2\": \"Description\",\n \"0-2\": \"Each action generates an action ID.\",\n \"1-0\": \"`action.update`\",\n \"2-0\": \"`action.cancel()`\",\n \"h-1\": \"Example\",\n \"1-1\": \"```\\naction.update({ updated: 'property' })\\n```\\nEquivalent to\\n```\\nwoopra.update(action.id, { updated: 'property' })\\n```\",\n \"1-2\": \"Used to update a property on callback.\",\n \"0-1\": \"idptnc = action.id\",\n \"2-1\": \"Equivalent to:\\n```\\nwoopra.cancelAction(action.id)\\n```\",\n \"2-2\": \"Cancels an action on callback\"\n },\n \"cols\": 3,\n \"rows\": 3\n}\n[/block]\n\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"\",\n \"language\": \"text\"\n }\n ]\n}\n[/block]\n###Example\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.track(\\\"signup\\\", {\\n company: \\\"My Business\\\",\\n username: \\\"johndoe\\\",\\n plan: \\\"Gold\\\"\\n});\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nThe code above will track a custom event titled “signup”, and provides some more information like the username and company of the account created. Just imagine all of the custom events that can be tracked on your website: `payment`, `comment`, `logout`, `email,` etc…\n\nWhat’s even more important about custom events is that you can always run custom reports about the data you pass to Woopra, so for the example given above, you could get the number of `signup`s by `company`.\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"When you track custom events, remember to update your schema on Woopra. Woopra will auto-generate a schema for the first event of that name that comes in, but you can add a display name and declare the types of values passed as event properties. That will help the rest your team to identify the events being tracked and Woopra will automatically build reports out of the box based on the event properties.\",\n \"title\": \"Don't Forget Your Schemas\"\n}\n[/block]\nBelow is another example to track when people click on the play button with ```id=\"play-button\"```:\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"document.getElementById(\\\"play-button\\\").onclick = function() {\\n woopra.track(\\\"play\\\", {\\n artist: \\\"Dave Brubeck\\\",\\n song: \\\"Take Five\\\",\\n genre: \\\"Jazz\\\"\\n });\\n};\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]","excerpt":"","slug":"woopratrack","type":"basic","title":"woopra.track()","__v":0,"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-09-20T23:00:21.897Z","deprecated":false,"children":[],"childrenPages":[]},{"_id":"5d38e4b55f867000221c60bf","version":"5b070ce4060bee00035d8d12","updatedAt":"2021-12-29T18:07:21.031Z","createdAt":"2019-07-24T23:07:33.822Z","project":"58b721a1f22b830f009a0bcd","category":"5d38e3c94c6ef200427da8ec","user":"560a301e109fc70d00008bad","updates":[],"next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":true,"order":4,"body":"[block:api-header]\n{\n \"type\": \"basic\",\n \"title\": \"Identifying Customers\"\n}\n[/block]\nIn order to identify a customer, you need to send their ```email``` address to Woopra as a custom visitor property. Calling ```identify()``` does not send anything to Woopra, in order to send the properties and identify the visitor, you need to call ```track()``` after you ```identify()```, or if you do not wish to track an event, you may call `woopra.push()` to send a call strictly with identifying information. \n[block:callout]\n{\n \"type\": \"warning\",\n \"body\": \"\",\n \"title\": \"All visitor properties should be lowercase\"\n}\n[/block]\n#`woopra.identify(visitor-properties<object>)`\n[block:parameters]\n{\n \"data\": {\n \"0-0\": \"```\\nproperties\\n```\",\n \"h-0\": \"Argument\",\n \"h-1\": \"Type\",\n \"h-2\": \"Description\",\n \"0-1\": \"Object\",\n \"0-2\": \"An object of any properties you want to save for this current visitor.\"\n },\n \"cols\": 3,\n \"rows\": 1\n}\n[/block]\n###Example\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"// configure\\nwoopra.config(...);\\n \\n// Identify customer\\nwoopra.identify({\\n email: \\\"[email protected]\\\",\\n name: \\\"John Doe\\\",\\n company: \\\"My Business\\\"\\n});\\n \\n// track\\nwoopra.track();\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nStandard attributes which will be displayed in the Woopra live visitor data include:\n\n * `id` – used as a primary identifier.\n * `email` – displays the visitor’s email address and it will be used as a secondary unique identifier.\n * `name` – displays the visitor’s full name\n * `company` – displays the company name or account of your customer\n * `avatar` – is a URL link to a visitor avatar\n\nBut you can define any attribute you like and have that detail passed from within the visitor live stream data when viewing Woopra.\n[block:callout]\n{\n \"type\": \"info\",\n \"body\": \"Note that if you wish to identify a visitor without sending a tracking event, you can call the function ```push()```.\"\n}\n[/block]","excerpt":"","slug":"woopraidentify","type":"basic","title":"woopra.identify()","__v":0,"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"deprecated":false,"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-12-29T05:58:36.375Z","children":[],"childrenPages":[]},{"_id":"5d38e4d39ee3ff00189becd9","version":"5b070ce4060bee00035d8d12","updatedAt":"2019-09-27T19:55:49.008Z","createdAt":"2019-07-24T23:08:03.807Z","project":"58b721a1f22b830f009a0bcd","category":"5d38e3c94c6ef200427da8ec","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":true,"order":5,"body":"When you run `woopra.identify()`, the SDK assigns the properties you pass to the visitor object for the next track request. The `track()` function will send the request with any visitor properties that have been set, and with the event name and event properties as well in the same request. \n\nSometimes, however, you do not want to track an event by a visitor, but only to set a property on that visitor's profile, or identify the visitor by email, ID, or phone number. In this case, you should use `woopra.push()`\n\n#`woopra.push([callback])`\n[block:parameters]\n{\n \"data\": {\n \"0-0\": \"`callback`\",\n \"h-0\": \"Argument\",\n \"h-1\": \"Type\",\n \"h-2\": \"Description\",\n \"0-2\": \"A callback function to run after the tracking function has been successfully received by Woopra\",\n \"0-1\": \"Function\"\n },\n \"cols\": 3,\n \"rows\": 1\n}\n[/block]\n###Example\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.identify(\\\"email\\\", \\\"[email protected]\\\").push();\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]","excerpt":"","slug":"wooprapush","type":"basic","title":"woopra.push()","__v":0,"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"614a1f6628cadb00432e93e1","metadata":{"image":[],"title":"","description":""},"api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"next":{"description":"","pages":[]},"title":"woopra.update()","updates":[],"type":"basic","slug":"woopraupdate","excerpt":"","body":"This API is used to update existing actions using an ID of a WoopraAction. The ID of the action will be generated on the client-side as:\n\n**idptnc = action.id** \n\nThis example is updating an existing action in Woopra with the property \"category.\"\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.update(\\n action.id,\\n { category: 'home' }\\n);\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]","order":6,"isReference":true,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-09-20T22:36:43.874Z","createdAt":"2021-09-21T18:07:34.368Z","updatedAt":"2021-09-21T21:14:47.568Z","user":"5adfa297452bd900036d0f67","category":"5d38e3c94c6ef200427da8ec","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","__v":0,"parentDoc":null,"children":[],"childrenPages":[]},{"_id":"614a21a82f98f2004bb742b3","metadata":{"image":[],"title":"","description":""},"api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"next":{"description":"","pages":[]},"title":"woopra.cancelAction()","updates":[],"type":"basic","slug":"woopracancelaction","excerpt":"","body":"This API is used to cancel actions with [lifecycle of page](https://docs.woopra.com/reference#:~:text=lifecycle) from further updating themselves using an ID of a WoopraAction.\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"woopra.cancelAction(action.id);\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]","order":7,"isReference":true,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-09-20T22:15:50.899Z","createdAt":"2021-09-21T18:17:12.136Z","updatedAt":"2021-09-21T21:15:31.870Z","user":"5adfa297452bd900036d0f67","category":"5d38e3c94c6ef200427da8ec","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","__v":0,"parentDoc":null,"children":[],"childrenPages":[]}]},{"_id":"5b070ce4060bee00035d8c88","apiSetting":"5b070ce4060bee00035d8c90","createdAt":"2017-03-03T02:07:15.119Z","from_sync":false,"order":2,"title":"HTTP Tracking API","__v":0,"project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","slug":"http-tracking-api","isAPI":true,"reference":true,"pages":[{"_id":"5b070ce4060bee00035d8c9e","user":"560a301e109fc70d00008bad","body":"The HTTP tracking API is the most fundamental way to track events and visitor properties into Woopra. All of the tracking SDKs use this API. It is also fairly simple. If you have any issues with one of the SDK's and its compatibility or anything else, it is quite trivial to use the HTTP Tracking API instead, and gain full control of the tracking requests that you are sending to Woopra.\n\n##Types of Tracking Data\n### Custom Events and Event Properties\nOne of the key features of Woopra is the ability to track [Custom Events](doc:custom-actions-and-visitor-data). Understanding custom events and custom event properties is crucial to getting a good tracking implementation, and to realizing the full power of Woopra. Custom events are tracked using the [/track/ce](ref:track-ce) endpoint. *These properties are sent with the key prefix: `ce_`*\n\n### Custom Visitor Data\nWoopra allows you to store [custom visitor data](doc:visitor-properties) on the profiles of your visitors. You can add and set visitor properties on the visitor who performs the action you are tracking. This can be done when tracking a custom event via [`/track/ce`](ref:track-ce) , or without tracking an event by calling [`/track/identify`](ref:track-identify). *These properties are sent with the key prefix: `cv_`*\n\n###Custom Visit Data\nWoopra also allows you to set metadata that span multiple events, but are not saved on the visitor's profile. This is session or visit data. Examples of this would be device\\_type, browser, user-agent, etc. While these properties are built-in and thus are not prefixed, and in some cases are in fact generated from http headers, etc., you can also create custom session/visit properties by using the prefix. *These properties are sent with the key prefix: `cs_`*\n\n##Custom Data Property Prefixes: `ce_`, `cv_`, and `cs_`\nIn order to allow for fast encoding, and a flat data structure, the GET request parameters are prefixed with cX_ to denote if the item is a custom event property, a custom visitor property, or a custom session property. We *do* try to respond to track requests within 300ms after all. \n* Custom Event properties are prefixed with `ce_`\n* Custom Visitor properties are prefixed with `cv_`\n* Custom Session properties are prefixed with `cs_`\n\n\n##Special Fields\nParameters that do not have these prefixes are non-custom, built-in or required event metadata such as the event name itself, the timeout (how long before the session is considered over before another event occurs), the project you want to send this event to, the event timestamp, the referer, etc. For legacy reasons, the `cookie` [(aka device id)](doc:profile-id-system) is also sent without a prefix. \n\n##Conventional Fields\nSome fields can be sent as custom event properties but will be treated specially by the woopra system. The clearest example of this is the campaign data fields. Sending `ce_campaign_name` will actually cause the Woopra system to recognize and display the campaign data for that event in a special way. It will also use this data in attribution reports.\n\nAnother example is the `url` property of a pageview event. Woopra will use this to look for `utm_` tags and treat them the same as `campaign_name` and `campaign_source` event properties. [Click here to learn more about campaign tags.](doc:campaign-tracking) \n[block:callout]\n{\n \"type\": \"warning\",\n \"title\": \"URL Encoding\",\n \"body\": \"Don't forget to url encode your property keys and values. \\n**Note:** all examples omit encoding for legibility!\"\n}\n[/block]\n\n\n---\n###Example: \n**Consider these request query parameters:**\n\n```\n?project=myproject.com\n &event=bark\n &timestamp= 1492030800000\n &cv_name=Rio\n &ce_campaign_name=Teach+Speak+Command\n &ce_bark_volume=loud\n &cs_is_post_nap=true\n```\nThe `project`, `event` and `timestamp` parameters all cary necessary or overriding event metadata. The event name, the destination project, the event timestamp to use instead of the time of receipt, etc.\n\nThe `cv_name` will turn into a property on the visitor's profile. That property will be called \"name\", and will have the value on this visitor profile of \"Rio\". The prefix is removed before it is actually put into your data.\n\nThe `ce_bark_volume` on the other hand, will be a property of this particular bark event. It will show up when you expand the event in a visitor's event timeline as \"bark_volume\", and will have the value set as: \"loud.\" Similarly, the `ce_campaign_name` will also show up as an event property, but additionally, it will be used to report on attribution and for some UI conveniences in the Woopra app.\n\n---\n\n## Event and Session Timeout\nThe `timeout` parameter (not prefixed), represents the elapsed time, starting from when this event is tracked, after which the visitor's session or visit should be considered over if no further events are tracked. It takes an integer value in milliseconds. You can prevent a session from ending without tracking another event if you send a [`/ping`](ref:track-ping) request for the same visitor.\n\n##Responses\n###Response Codes\nYou will get a `2xx` as a response code immediately unless your request is dropped for one of the three reasons in the \"Dropped Requests\" section below.\n\n* `200` -- Processed. Request has been received and logged\n* `202` -- Queued. Request could not be processed within 300 ms due to load, so it has been queued.\n* `401` -- Unauthorized: you have secure tracking enabled, but the request is not authenticated\n* `402` -- Over Quota: Your project has reached its quota for number of actions tracked. Tracking data is logged, but triggers are not run, and interface is locked out. Upgrade to see your data.\n* `403` -- Forbidden: Your project is not registered, or you have defined exclusions for this visitor\n* `5XX` -- There has been a server error. Please double check your request format, then report to [email protected].\n\n###Response Bodies\nThe tracking servers will usually respond with a string of javascript to be run on the browser of the visitor if possible. The [Javascript client-side API](ref:intro-javscript-sdk), for example runs this string of code, which can invoke trigger actions from the system or AppConnect apps, as well as set metadata on the tracker object itself for access by these triggers, such as the visitors's label membership information.\n\n##Dropped Requests\nWoopra's tracking servers are as forgiving as they can possibly be. There are very few reasons for which a request sent to a tracking server will be dropped and not tracked. Here they are:\n\n1. **If there is no project in the request**, or the project does not exist, the Woopra Tracking servers do no know on which Woopra instance to apply the data. In this case, the request will be dropped. The preferred parameter to send your project name in a tracking request is `project`, but for legacy and flexibility reasons, it will also check these parameters for a project title: `domain`, `website`, `host`, and `alias`. The Server will return a `403`.\n\n2. **If [Secure Tracking](doc:secure-tracking) is enabled and the tracking request is not secure,** the tracking servers will refuse to track the event in the request. The Server will return a `401`.\n\n3. **If the visitor is excluded** for instance by ip or by user-agent in your settings, Woopra will drop the request. See [Excluding Visitors](doc:exclusions). The server will return a code `403`.\n[block:callout]\n{\n \"type\": \"danger\",\n \"title\": \"Missing Visitor Identifiers\",\n \"body\": \"**If there are no **Visitor Identifiers** for the visitor,** the tracking servers do not know on which visitor profile to apply this action. Identifiers include but are not limited to: `id`, `email`, and `cookie`. See [Woopra's Profile ID System](doc:profile-id-system) for more-in depth discussion on visitor identifiers, and the id hierarchy. \\n\\nIn this case, the tracking server will usually accept the request, but will generate a random value and place it in the `cookie` field of the visitor. (Woopra cookies are the lowest level of id in the id hierarchy. Think of woopra cookies as a device_id).\\n\\nIf this happens, you will never be able to identify the user who performed the action, nor will you be able to assign more actions or visitor properties to this user.\"\n}\n[/block]\n##Sending Event Timestamps\n###Historical Events\nYou may send any timestamp in the past with your event. Sending future timestamps will not work reliably. Sending old timestamps will work, and the data will be considered in it's true place in time. However, please note that sending events older than your data retention window will result in an apparent loss of those events.\n\n###Future Events\nSending events with timestamps in the future can work, but can also cause unexpected behavior. The event will be logged in the log file of the time of receipt. The data will not show up in the Woopra UI until the timestamp has passed, ie: until the event \"happens.\" \n\nIn both cases, the larger the difference between the timestamp of the event itself and the date of the transactional db log file in which it was recorded, the more likely the event will be missed in analytics, and segment reporting. This generally happens because certain time constraints of a report cause the system to only evaluate log files of that date range. If you think you may be missing out on data when you run certain reports, reach out to [email protected] to get more details on this with regards to your specific situation.\n[block:callout]\n{\n \"type\": \"warning\",\n \"title\": \"Old Events\",\n \"body\": \"Note, that while the tracking servers will accept a well-formed request in which the timestamp is older than your data retention policy limit, you will likely never see those events in the interface.\"\n}\n[/block]\n\n## Tid Bits\n* There is no limit on the number of the parameters, as long as your browser can handle the size of the resulting GET request.\n* It is recommended to use non-blocking http clients, especially for high volume traffic.\n* The Http client used to start the tracking requests should be able to handle 301, 302 redirects, and should preferably handle cookies.","category":"5b070ce4060bee00035d8c88","createdAt":"2017-03-03T22:22:50.960Z","githubsync":"","next":{"pages":[],"description":""},"order":0,"title":"Intro: HTTP Tracking API","version":"5b070ce4060bee00035d8d12","excerpt":"The most basic way to get data into the Woopra system","hidden":false,"isReference":true,"link_url":"","parentDoc":null,"project":"58b721a1f22b830f009a0bcd","type":"basic","slug":"intro-http-tracking","__v":0,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"link_external":false,"sync_unique":"","updates":[],"updatedAt":"2021-12-29T19:51:43.834Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-06-10T21:45:13.268Z","deprecated":false,"children":[],"childrenPages":[]},{"_id":"5b070ce4060bee00035d8c92","type":"basic","api":{"auth":"required","params":[],"url":"","method":"get","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"code":"{}","name":"","status":400,"language":"json"}]}},"category":"5b070ce4060bee00035d8c88","createdAt":"2017-03-03T00:00:49.595Z","next":{"pages":[],"description":""},"project":"58b721a1f22b830f009a0bcd","sync_unique":"","parentDoc":null,"__v":0,"body":"#Endpoint: `http(s)://www.woopra.com/track/ce`\n\n#Track Requests\nTrack requests track an event performed by a visitor. This is the main endpoint to use, and may very well end up being the only endpoint you need to use.\n\n## GET Request Parameters\n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"Parameter\",\n \"h-1\": \"Required\",\n \"h-2\": \"Type\",\n \"0-0\": \"`project`\",\n \"0-1\": \"***Required***\",\n \"h-3\": \"Example\",\n \"0-2\": \"<string>\",\n \"0-3\": \"`my-project.com`\",\n \"1-0\": \"`cookie`\",\n \"4-0\": \"`cv_{Visitor Identifier}`\",\n \"5-0\": \"`cv_{Visitor Property}`\",\n \"4-1\": \"***Optional*** (Required to identify a user)\",\n \"1-1\": \"**Optional** (Recommended. See Description)\",\n \"5-1\": \"**Optional**\",\n \"4-2\": \"<string>\",\n \"5-2\": \"Various (See Description)\",\n \"1-2\": \"<string>\",\n \"1-3\": \"`kDei34gy3h25F`\",\n \"1-4\": \"The Cookie should be thought of as a device id. It can also be used for anonymous ids. Required if no `cv_{Visitor Identifier}`. See [The Cookie](doc:profile-id-system)\",\n \"0-4\": \"The name of your project in Woopra.\",\n \"h-4\": \"Description\",\n \"4-3\": \"`[email protected]`\",\n \"5-3\": \"`cv_first_name=Tigi`\",\n \"4-4\": \"An identifier or multiple identifiers to associate with this visitor. Required if no `cookie`. See [Visitor Properties](doc:visitor-properties)\",\n \"5-4\": \"Properties to set on the visitor's profile. These can be strings, numbers, dates, etc. See [Visitor Properties](doc:visitor-properties)\",\n \"6-0\": \"`ce_{Event Property}`\",\n \"6-1\": \"**Optional**\",\n \"6-2\": \"Various (See Description)\",\n \"6-3\": \"`ce_total_value=54`\",\n \"6-4\": \"Properties to set on the custom event. These can be strings, numbers, dates, etc. See [Custom Events](doc:custom-actions-and-visitor-data#section-tracking-action-data).\",\n \"7-0\": \"`cs_{Visit Property}`\",\n \"7-1\": \"**Optional**\",\n \"7-2\": \"Various (See Description)\",\n \"7-3\": \"`cs_is_work_computer=false`\",\n \"7-4\": \"Properties to set on the visit/session. These can be strings, numbers, dates, etc. See [Visit/Session Properties](doc:visitor-properties)\",\n \"2-0\": \"`event`\",\n \"2-1\": \"***Required***\",\n \"2-2\": \"<string> lowercase\",\n \"2-3\": \"`form_submit`\",\n \"2-4\": \"The name of the custom event that you are tracking. See [Custom Events](doc:custom-actions-and-visitor-data#section-tracking-action-data).\",\n \"8-4\": \"Visit’s referring URL, Woopra servers will match the URL against a database of referrers and will generate a referrer type and search terms when applicable. The referrers data will be automatically accessible from the Woopra interface\",\n \"8-1\": \"**Optional**\",\n \"8-0\": \"`referer`\",\n \"8-2\": \"<string> valid url\",\n \"8-3\": \"`https://www.google.com`\",\n \"9-0\": \"`ip`\",\n \"9-1\": \"**Optional**\",\n \"9-2\": \"<string> Valid IP Address\",\n \"9-3\": \"`127.0.0.1`\",\n \"9-4\": \"IP address of the visitor. If defined, it overrides the physical IP address of the connection.\",\n \"10-0\": \"`timeout`\",\n \"10-1\": \"**Optional**\",\n \"10-2\": \"<integer> milliseconds\",\n \"10-3\": \"Default: `30000` //30 seconds\",\n \"10-4\": \"In milliseconds, defaults to 30000 (equivalent to 30 seconds) after which the event will expire and the visit will be marked as over, and the visitor as offline.\",\n \"11-0\": \"`browser`\",\n \"11-1\": \"**Optional**\",\n \"11-4\": \"User’s browser. If defined, it overrides the auto-detected browser from the request's user-agent. You can also build your custom user-agent.\",\n \"11-2\": \"<string>\",\n \"11-3\": \"`chrome`\",\n \"12-0\": \"`os`\",\n \"12-1\": \"**Optional**\",\n \"12-2\": \"<string>\",\n \"12-3\": \"`Windows 10`\",\n \"12-4\": \"User’s operating system. If defined, it overrides the auto-detected operating system from user-agent.\",\n \"13-0\": \"`device`\",\n \"13-1\": \"*Optional*\",\n \"13-2\": \"<string>\",\n \"13-3\": \"eg: `mobile` or `iPhone`\",\n \"13-4\": \"User’s device type. If defined, it overrides the auto-detected device type from user-agent. Common values are mobile, tablet and desktop.\",\n \"3-0\": \"`timestamp`\",\n \"3-1\": \"**Optional**\",\n \"3-2\": \"<integer> unix ms timestamp\",\n \"3-3\": \"1489704275615\",\n \"3-4\": \"Event timestamp – time in milliseconds since the UNIX epoch that the event occurred. (this can be back-dated, but not in the future.)\",\n \"14-0\": \"`app`\",\n \"14-1\": \"*Optional*\",\n \"14-2\": \"<string>\",\n \"14-3\": \"eg: `server event` or `internal`\"\n },\n \"cols\": 5,\n \"rows\": 15\n}\n[/block]\n\n#### Pageviews\nWoopra has a default pageview event that the [Javascript Client Tracker](ref:intro-javscript-sdk) send when there are no arguments sent to the track function. It automatically adds certain visit and event properties such as page title, url, device resolution, etc. Here is an example of request parameters sent from the SDK for a built-in pageview event:\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"\\n{\\n project: \\\"dev.woopra.com\\\"\\n instance: \\\"woopra\\\"\\n screen: \\\"2560x1440\\\"\\n language: \\\"en-US\\\"\\n app: \\\"js-client\\\"\\n referer:\\\"www.google.com\\\"\\n cookie: \\\"5e0saOzmYfgh4q\\\"\\n event: \\\"pv\\\"\\n ce_title: \\\"Real-time Customer Analytics - Woopra\\\"\\n ce_domain: \\\"www.woopra.com\\\"\\n ce_url: \\\"/welcome-page\\\"\\n\\tce_uri: \\\"https://www.woopra.com/welcome-page\\\"\\n}\\n\",\n \"language\": \"javascript\"\n }\n ]\n}\n[/block]\nTo track similar pageview events via this API, it is recommended that at least `ce_url` is used for the page path, and `ce_title` is used for the page title. This will integrate seamlessly with the Woopra interface and built-in pageview event reporting.\n\n###Example\nTo track a `payment` by `John Smith` of `$149.95` for a `Titanium` package, you should issue a tracking request similar to the following:\n```\nhttp://www.woopra.com/track/ce/\n ?host=mywebsite.com\n &response=json\n &cookie=AH47DHS5SF182DIQZJD\n &timeout=300000\n &cv_username=John+Smith\n &[email protected]\n &event=payment\n &ce_amount=149.95\n &ce_type=blog\n &ce_package=Titanium\n```","githubsync":"","isReference":true,"link_external":false,"link_url":"","order":1,"updates":[],"user":"560a301e109fc70d00008bad","version":"5b070ce4060bee00035d8d12","excerpt":"To track events in Woopra, send `Http GET` requests to this endpoint","hidden":false,"slug":"track-ce","title":"/track/ce","updatedAt":"2022-03-23T03:48:06.091Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-09-30T07:13:23.854Z","deprecated":false,"children":[],"childrenPages":[]},{"_id":"5b070ce4060bee00035d8c97","api":{"url":"/identify","auth":"never","examples":{"codes":[]},"method":"get","params":[{"_id":"58ca3badc108331b00c205fe","ref":"","in":"path","required":false,"desc":"Your Project in Woopra.","default":"","type":"string","name":"project"}],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]}},"createdAt":"2017-03-03T02:05:43.849Z","hidden":false,"user":"5adfa297452bd900036d0f67","version":"5b070ce4060bee00035d8d12","__v":6,"excerpt":"To update visitor properties in Woopra, send `Http GET` requests to this endpoint","isReference":true,"link_url":"","parentDoc":null,"slug":"track-identify","title":"/track/identify","category":"5b070ce4060bee00035d8c88","order":2,"project":"58b721a1f22b830f009a0bcd","sync_unique":"","updates":[],"body":"#Endpoint: `http(s)://www.woopra.com/track/identify`\n\n#Identify requests\n\nIdentify requests can be used to ID a visitor and/or add properties to that visitor. The endpoint is: `http(s)://www.woopra.com/track/identify` and the parameters are the same as a regular tracking request (event data will be ignored)\n\n#### GET Request Parameters\n[block:parameters]\n{\n \"data\": {\n \"h-0\": \"Parameter\",\n \"h-1\": \"Required\",\n \"h-2\": \"Type\",\n \"0-0\": \"`project`\",\n \"0-1\": \"***Required***\",\n \"h-3\": \"Example\",\n \"0-2\": \"<string>\",\n \"0-3\": \"\\\"my-project.com\\\"\",\n \"1-0\": \"`cookie`\",\n \"2-0\": \"`cv_{Visitor Identifier}`\",\n \"3-0\": \"`cv_{Visitor Property}`\",\n \"2-1\": \"***Optional*** (Required to identify a user)\",\n \"1-1\": \"**Optional** (See Description)\",\n \"3-1\": \"**Required**\",\n \"2-2\": \"<string>\",\n \"3-2\": \"Various (See Description)\",\n \"1-2\": \"<string>\",\n \"1-3\": \"\\\"kDei34gy3h25F\\\"\",\n \"1-4\": \"The Cookie should be thought of as a device id. It can also be used for anonymous ids. Required if no `cv_{Visitor Identifier}`. See [The Cookie](doc:profile-id-system)\",\n \"0-4\": \"The name of your project in Woopra.\",\n \"h-4\": \"Description\",\n \"2-3\": \"`cv_email`: \\\"[email protected]\\\"\",\n \"3-3\": \"`cv_first_name`: \\\"Tigi\\\"\",\n \"2-4\": \"An identifier or multiple identifiers to associate with this visitor. Required if no `cookie`. See [Visitor Properties](doc:visitor-properties) and [Woopra Profile Id](doc:profile-id-system)\",\n \"3-4\": \"Properties to set on the visitor's profile. These can be strings, numbers, dates, etc. See [Visitor Properties](doc:visitor-properties)\"\n },\n \"cols\": 5,\n \"rows\": 4\n}\n[/block]\n##Example\n```curl\ncurl http://www.woopra.com/track/identify\\\n?host=mywebsite.com\\\n&cookie=AH47DHS5SF182DIQZJD\\\n&[email protected]\\\n&cv_name=Tigi\\\n&cv_age=31 \n```","githubsync":"","link_external":false,"next":{"pages":[],"description":""},"type":"basic","updatedAt":"2019-03-25T17:56:34.483Z","metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"5b070ce4060bee00035d8cba","api":{"params":[],"url":"","method":"get","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required"},"body":"# Ping requests\nOptionally, ping requests can be periodically sent to Woopra servers to refresh the visitor timeout counter for the session/visit. This is used if it’s important to keep a visitor status ‘online’ when she’s inactive for a long time (for cases such as watching a long video). The javascript SDK will automatically start sending pings after the first event is sent.\n\n```\nhttp://www.woopra.com/track/ping\n ?host=mywebsite.com\n &cookie=AH47DHS5SF182DIQZJD\n &timeout=300000\n```\n\n* There is no need to have custom parameters in the ping request.\n* It is recommend to send ping requests at intervals slightly less than the timeout value. If the timeout is 60 seconds, consider pinging the servers every 55 seconds, otherwise you will be sending unnecessary requests.","createdAt":"2017-03-16T07:45:01.087Z","link_external":false,"type":"basic","user":"5adfa297452bd900036d0f67","__v":0,"hidden":false,"slug":"track-ping","title":"/track/ping","version":"5b070ce4060bee00035d8d12","category":"5b070ce4060bee00035d8c88","link_url":"","order":4,"parentDoc":null,"updates":[],"excerpt":"Used to reset the session timeout counter, keeping this session alive","isReference":true,"next":{"description":"","pages":[]},"project":"58b721a1f22b830f009a0bcd","sync_unique":"","githubsync":"","updatedAt":"2021-09-21T21:19:32.964Z","metadata":{"title":"","description":"","image":[]},"pendingAlgoliaPublish":false,"previousSlug":"","slugUpdatedAt":"2021-09-20T22:55:02.426Z","children":[],"childrenPages":[]},{"_id":"5b070ce4060bee00035d8cbd","updates":[],"isReference":true,"link_external":false,"link_url":"","project":"58b721a1f22b830f009a0bcd","title":"Examples","__v":0,"sync_unique":"","type":"basic","version":"5b070ce4060bee00035d8d12","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"excerpt":"Examples of tracking code","hidden":false,"order":5,"parentDoc":null,"slug":"examples","user":"560a2cc087b71d0d000d3a44","body":"### Tracking Request Examples\nTrack a purchase event with some visitor data, and purchase event properties\n```\nhttp://www.woopra.com/track/ce\n ?host=mywebsite.com\n &response=json\n &cookie=AH47DHS5SF182DIQZJD\n &timeout=300000\n &cv_name=John+Smith \n &[email protected]\n &event=purchase\n &ce_item=Coffee+Machine \n &ce_category=Electric+Appliances\n &ce_sku=K5236532 \n```","category":"5b070ce4060bee00035d8c88","createdAt":"2017-03-16T18:12:16.278Z","githubsync":"","next":{"description":"","pages":[]},"updatedAt":"2019-09-27T19:55:49.011Z","metadata":{"title":"","description":"","image":[]},"children":[],"childrenPages":[]},{"_id":"5b070ce4060bee00035d8ce0","project":"58b721a1f22b830f009a0bcd","version":"5b070ce4060bee00035d8d12","category":"5b070ce4060bee00035d8c88","user":"5adfa297452bd900036d0f67","updates":[],"next":{"pages":[],"description":""},"createdAt":"2017-07-12T21:33:30.738Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":"","method":"get"},"isReference":true,"order":6,"body":"#Custom Email Tracking and Pixel Tracking\nOne inventive way to use our HTTP Tracking API is to use it to track your campaign email opens. You probably need to have some development experience to get this working.\n\nTypically, to track marketing email lifecycle events, one would simply install the Woopra integration for the relevant email provider in the Integrations Interface in Woopra. But we haven't integrated with every email platform, and some email marketing tools that we have integrated with, don't have this functionality either in the tool, or in our integration specifically. \n\nSo one solution is to use our HTTP Tracking API to do some of what a fully-featured email marketing automation platform does as far as tracking email lifecycle events.\n\n##TL;DR\nIn short, what you will be doing is creating a `<img>` tag with a source url that will in fact send data to Woopra's tracking servers. Basically a webhook to Woopra from each individual email you send.\n\n##Details\nSo let's say we want to track an event with this basic information in it when someone opens an email:\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"{\\n project: \\\"<your-woopra-project>\\\",\\n visitor: {\\n email: \\\"*|EMAIL|*\\\", //example merge tag from madril/mailchimp\\n \\tfname: \\\"*|FNAME|*\\\"\\n },\\n event: {\\n name: \\\"email_opened\\\",\\n params: {\\n email_subject: \\\"*|MC:SUBJECT|*\\\",\\n list_name: \\\"*|LIST:NAME|*\\\",\\n \\tcampaign_name: \\\"*|CAMPAIGN_NAME|*\\\",\\n campaign_id: \\\"*|CAMPAIGN_UID|*\\\",\\n campaign_source: \\\"email\\\",\\n //etc.\\n }\\n }\\n}\\n\",\n \"language\": \"json\"\n }\n ]\n}\n[/block]\nWe have used merge tags from mailchimp as examples of how to get the data from your email provider. It may be via templated values like merge tags in mandrill or mailchimp, or it may work in some other way, and you'll have to figure this out as part of getting the data into the email.\n\nOnce you know how to get all the data you want, compose the above event into a url that hits the Woopra HTTP Tracking API. The above data would look like this: \n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"https://www.woopra.com/track/ce?\\n\\tproject=woopra-project.com\\n &event=email_opened\\n &cv_email=*|EMAIL|*\\n &cv_fname=*|FNAME|*\\n &ce_email_subject=*|MC:SUBJECT|*\\n &ce_list_name=*|LIST:NAME|*\\n &ce_campaign_name=*|CAMPAIGN_NAME|*\\n &ce_campaign_id=*|CAMPAIGN_UID|*\\n &ce_campaign_source=email\",\n \"language\": \"text\"\n }\n ]\n}\n[/block]\nFinally, You would put this into an html image tag and place that raw html into your emails (perhaps in the signature so that it is always there).\n\nThe image tag may look like this: \n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"<img src=\\\"https://www.woopra.com/track/ce?project=woopra-project.com&event=email_opened&cv_email=*|EMAIL|*&cv_fname=*|FNAME|*&ce_email_subject=*|MC:SUBJECT|*&ce_list_name=*|LIST:NAME|*&ce_campaign_name=*|CAMPAIGN_NAME|*&ce_campaign_id=*|CAMPAIGN_UID|*&ce_campaign_source=email\\\"/> \",\n \"language\": \"html\"\n }\n ]\n}\n[/block]\nNow, whenever that email is rendered, a track event will be sent to Woopra as part of that HTML email rendering. This won't work for email recipients who request text-only emails, or cannot view HTML emails.\n\n##Pixel Tracking\n###response\nAlternatively, you can track a 1 by 1 transparent pixel in the email as well. You can use 'response' = pixel. Using this, you can track Email open events. \n\nThe image tag will look something like this:\n[block:code]\n{\n \"codes\": [\n {\n \"code\": \"https://www.woopra.com/track/ce/?response=pixel&host=your-project.com&event=email+open&ce_subject=email+subject&cv_email=users.email\\n\",\n \"language\": \"text\",\n \"name\": null\n }\n ]\n}\n[/block]\n###redirect\nIn addition to pixel tracking, if you wanted to track an email click event, you can use 'redirect' = pageurl. Alternatively, you could use [UTM tags](doc:camp