[{"data":1,"prerenderedAt":1431},["ShallowReactive",2],{"docs-navigation":3,"docs:\u002Fdocs\u002Fdevelopers\u002Fflutter-sdk":505,"docs-area:\u002Fdocs\u002Fdevelopers":1426,"docs-surround:\u002Fdocs\u002Fdevelopers\u002Fflutter-sdk":1428},[4],{"title":5,"path":6,"stem":7,"children":8,"page":504},"Docs","\u002Fdocs","docs",[9,58,123,349,363,377,391,418,467,489],{"title":10,"path":11,"stem":12,"children":13,"icon":52,"summary":53,"section":18,"highlights":54},"Get started","\u002Fdocs\u002Fget-started","docs\u002F01.get-started\u002Findex",[14,21,26,31,37,42,47],{"title":15,"path":16,"stem":17,"icon":18,"summary":19,"section":20,"highlights":18,"children":-1},"Quickstart","\u002Fdocs\u002Fget-started\u002Fquickstart","docs\u002F01.get-started\u002F01.quickstart",null,"Create a property, add the tag to your site and see your first visits in Analytics.","Start here",{"title":22,"path":23,"stem":24,"icon":18,"summary":25,"section":20,"highlights":18,"children":-1},"Set up your organisation","\u002Fdocs\u002Fget-started\u002Fset-up-your-organisation","docs\u002F01.get-started\u002F02.set-up-your-organisation","Sign in, turn on two-step verification, choose where data is stored and invite your team.",{"title":27,"path":28,"stem":29,"icon":18,"summary":30,"section":20,"highlights":18,"children":-1},"Core concepts","\u002Fdocs\u002Fget-started\u002Fcore-concepts","docs\u002F01.get-started\u002F03.core-concepts","Organisations, properties, events, visits, page and click types, and how Publish reaches Analytics.",{"title":32,"path":33,"stem":34,"icon":18,"summary":35,"section":36,"highlights":18,"children":-1},"Guide for marketers","\u002Fdocs\u002Fget-started\u002Ffor-marketers","docs\u002F01.get-started\u002F04.for-marketers","Read the dashboards, explore your own questions and see where visitors struggle.","Guides by role",{"title":38,"path":39,"stem":40,"icon":18,"summary":41,"section":36,"highlights":18,"children":-1},"Guide for engineers","\u002Fdocs\u002Fget-started\u002Ffor-engineers","docs\u002F01.get-started\u002F05.for-engineers","Install the tag, set up consent and identify, and keep capture safe on your pages.",{"title":43,"path":44,"stem":45,"icon":18,"summary":46,"section":36,"highlights":18,"children":-1},"Guide for data teams","\u002Fdocs\u002Fget-started\u002Ffor-data-teams","docs\u002F01.get-started\u002F06.for-data-teams","Map your data layer to standard fields, publish, and build on the explores.",{"title":48,"path":49,"stem":50,"icon":18,"summary":51,"section":36,"highlights":18,"children":-1},"Guide for ecommerce teams","\u002Fdocs\u002Fget-started\u002Ffor-ecommerce-teams","docs\u002F01.get-started\u002F07.for-ecommerce-teams","Carts, checkouts, orders, revenue and attribution for your store.","i-lucide-rocket","Set up your organisation, add the tag and see your first visits in Analytics.",[55,56,57],{"title":15,"to":16},{"title":22,"to":23},{"title":27,"to":28},{"title":59,"path":60,"stem":61,"children":62,"icon":116,"summary":117,"section":18,"highlights":118},"Data Capture","\u002Fdocs\u002Fdata-capture","docs\u002F02.data-capture\u002Findex",[63,69,74,79,84,90,95,100,105,111],{"title":64,"path":65,"stem":66,"icon":18,"summary":67,"section":68,"highlights":18,"children":-1},"Install the website tag","\u002Fdocs\u002Fdata-capture\u002Finstall-the-website-tag","docs\u002F02.data-capture\u002F01.install-the-website-tag","Add the install snippet to every page, allow it in your CSP, and check that it works.","Set up",{"title":70,"path":71,"stem":72,"icon":18,"summary":73,"section":68,"highlights":18,"children":-1},"Turn capture features on","\u002Fdocs\u002Fdata-capture\u002Fturn-features-on","docs\u002F02.data-capture\u002F02.turn-features-on","What each capture card on a property does, and which are on from the start.",{"title":75,"path":76,"stem":77,"icon":18,"summary":78,"section":68,"highlights":18,"children":-1},"Existing tags and data layers","\u002Fdocs\u002Fdata-capture\u002Fexisting-tags-and-data-layers","docs\u002F02.data-capture\u002F03.existing-tags-and-data-layers","Read your tag manager data layer and the analytics tools you already run, without re-tagging.",{"title":80,"path":81,"stem":82,"icon":18,"summary":83,"section":68,"highlights":18,"children":-1},"Shopify checkout","\u002Fdocs\u002Fdata-capture\u002Fshopify-checkout","docs\u002F02.data-capture\u002F04.shopify-checkout","Count a Shopify store's carts, checkouts and orders, line by line, with Kontala's pixel.",{"title":85,"path":86,"stem":87,"icon":18,"summary":88,"section":89,"highlights":18,"children":-1},"Page and click types","\u002Fdocs\u002Fdata-capture\u002Fpage-and-click-types","docs\u002F02.data-capture\u002F05.page-and-click-types","The 11 page types and 30 click types, and how Kontala decides each one.","What gets captured",{"title":91,"path":92,"stem":93,"icon":18,"summary":94,"section":89,"highlights":18,"children":-1},"Struggle signals","\u002Fdocs\u002Fdata-capture\u002Fstruggle-signals","docs\u002F02.data-capture\u002F06.struggle-signals","Rage clicks, dead clicks, errors, page speed and quick backs, and how each is detected.",{"title":96,"path":97,"stem":98,"icon":18,"summary":99,"section":89,"highlights":18,"children":-1},"Revenue and campaigns","\u002Fdocs\u002Fdata-capture\u002Frevenue-and-campaigns","docs\u002F02.data-capture\u002F07.revenue-and-campaigns","Orders and revenue, the campaign parameters Kontala keeps, channels, attribution and ad spend.",{"title":101,"path":102,"stem":103,"icon":18,"summary":104,"section":89,"highlights":18,"children":-1},"Identify visitors","\u002Fdocs\u002Fdata-capture\u002Fidentify-visitors","docs\u002F02.data-capture\u002F08.identify-visitors","Tell Kontala who signed in, and how visits and visitors are counted.",{"title":106,"path":107,"stem":108,"icon":18,"summary":109,"section":110,"highlights":18,"children":-1},"Consent","\u002Fdocs\u002Fdata-capture\u002Fconsent","docs\u002F02.data-capture\u002F09.consent","How the tag behaves before and after a visitor answers your consent banner, and how to wire it up.","Privacy and control",{"title":112,"path":113,"stem":114,"icon":18,"summary":115,"section":110,"highlights":18,"children":-1},"Privacy and governance","\u002Fdocs\u002Fdata-capture\u002Fprivacy-and-governance","docs\u002F02.data-capture\u002F10.privacy-and-governance","What is kept and what is removed, page URLs, cookies, IP addresses, bots and how to leave parts of a page out.","i-lucide-mouse-pointer-click","One line of code captures page views, clicks, scrolling and struggle, classified in business terms.",[119,120,121,122],{"title":64,"to":65},{"title":70,"to":71},{"title":85,"to":86},{"title":106,"to":107},{"title":124,"path":125,"stem":126,"children":127,"icon":342,"summary":343,"section":18,"highlights":344},"Analytics","\u002Fdocs\u002Fanalytics","docs\u002F03.analytics\u002Findex",[128,134,139,145,150,155,160,165,171,176,182,187,193,198,203,208,213,218,223,228,233,238,243,248,253,258,263,268,273,278,283,288,293,299,304,309,314,318,323,328,333,338],{"title":129,"path":130,"stem":131,"icon":18,"summary":132,"section":133,"highlights":18,"children":-1},"Dashboards","\u002Fdocs\u002Fanalytics\u002Fdashboards","docs\u002F03.analytics\u002F01.dashboards","Open Kontala Analytics and find your way around the ready-made dashboards Kontala builds for you.","Get around",{"title":135,"path":136,"stem":137,"icon":18,"summary":138,"section":133,"highlights":18,"children":-1},"Explores, metrics and the semantic layer","\u002Fdocs\u002Fanalytics\u002Fsemantic-layer","docs\u002F03.analytics\u002F02.semantic-layer","The 21 explores Kontala maintains, what is in them, and how your Data Capture settings shape them.",{"title":140,"path":141,"stem":142,"icon":18,"summary":143,"section":144,"highlights":18,"children":-1},"How explores, dimensions and metrics work","\u002Fdocs\u002Fanalytics\u002Fexplores-dimensions-and-metrics","docs\u002F03.analytics\u002F03.explores-dimensions-and-metrics","Where a question starts, what you group it by, and what you measure.","Concepts",{"title":146,"path":147,"stem":148,"icon":18,"summary":149,"section":144,"highlights":18,"children":-1},"Explores","\u002Fdocs\u002Fanalytics\u002Fexplores","docs\u002F03.analytics\u002F04.explores","Open an explore, pick dimensions and metrics, then filter, sort and run your query.",{"title":151,"path":152,"stem":153,"icon":18,"summary":154,"section":144,"highlights":18,"children":-1},"Dimensions","\u002Fdocs\u002Fanalytics\u002Fdimensions","docs\u002F03.analytics\u002F05.dimensions","What you group and filter by: dimension types, dates and time intervals, filters and bins.",{"title":156,"path":157,"stem":158,"icon":18,"summary":159,"section":144,"highlights":18,"children":-1},"Metrics","\u002Fdocs\u002Fanalytics\u002Fmetrics","docs\u002F03.analytics\u002F06.metrics","What you measure: metric types, custom metrics, table calculations and the Metrics Catalog.",{"title":161,"path":162,"stem":163,"icon":18,"summary":164,"section":144,"highlights":18,"children":-1},"Attribution modelling","\u002Fdocs\u002Fanalytics\u002Fattribution-modelling","docs\u002F03.analytics\u002F07.attribution-modelling","How conversions are credited to channels and campaigns: journeys, touchpoints, the three models and the switches.",{"title":166,"path":167,"stem":168,"icon":18,"summary":169,"section":170,"highlights":18,"children":-1},"Explore and visualise","\u002Fdocs\u002Fanalytics\u002Fexplore-and-visualise","docs\u002F03.analytics\u002F08.explore-and-visualise","Build your own charts from the explores: filters, table calculations, custom fields and chart types.","Analyse",{"title":172,"path":173,"stem":174,"icon":18,"summary":175,"section":170,"highlights":18,"children":-1},"Ask AI and agents","\u002Fdocs\u002Fanalytics\u002Fask-ai-and-agents","docs\u002F03.analytics\u002F09.ask-ai-and-agents","AI assistants are not yet available in Kontala Analytics.",{"title":177,"path":178,"stem":179,"icon":18,"summary":180,"section":181,"highlights":18,"children":-1},"Share and export","\u002Fdocs\u002Fanalytics\u002Fshare-and-export","docs\u002F03.analytics\u002F10.share-and-export","Share links, comment on dashboards, export results and duplicate dashboards.","Share and govern",{"title":183,"path":184,"stem":185,"icon":18,"summary":186,"section":181,"highlights":18,"children":-1},"Security and governance","\u002Fdocs\u002Fanalytics\u002Fsecurity-and-governance","docs\u002F03.analytics\u002F11.security-and-governance","How you sign in to Analytics, what each role can do, and how your data is kept apart.",{"title":188,"path":189,"stem":190,"icon":18,"summary":191,"section":192,"highlights":18,"children":-1},"Page views","\u002Fdocs\u002Fanalytics\u002Fpage-views","docs\u002F03.analytics\u002F12.page-views","Every page view, with its page, page type, visit, location, device, scroll depth and speed.","Explore reference",{"title":194,"path":195,"stem":196,"icon":18,"summary":197,"section":192,"highlights":18,"children":-1},"Visits","\u002Fdocs\u002Fanalytics\u002Fvisits","docs\u002F03.analytics\u002F13.visits","Every visit, as it arrived: channel, landing page, conversions and revenue.",{"title":199,"path":200,"stem":201,"icon":18,"summary":202,"section":192,"highlights":18,"children":-1},"Clicks","\u002Fdocs\u002Fanalytics\u002Fclicks","docs\u002F03.analytics\u002F14.clicks","Every click on a link, button or control, and every form sent, with its click type.",{"title":204,"path":205,"stem":206,"icon":18,"summary":207,"section":192,"highlights":18,"children":-1},"Swipes","\u002Fdocs\u002Fanalytics\u002Fswipes","docs\u002F03.analytics\u002F15.swipes","Every sideways swipe, such as through a carousel or gallery.",{"title":209,"path":210,"stem":211,"icon":18,"summary":212,"section":192,"highlights":18,"children":-1},"Friction","\u002Fdocs\u002Fanalytics\u002Ffriction","docs\u002F03.analytics\u002F16.friction","Every JavaScript error, rage click, dead click and quick back, and where it happened.",{"title":214,"path":215,"stem":216,"icon":18,"summary":217,"section":192,"highlights":18,"children":-1},"Checkout","\u002Fdocs\u002Fanalytics\u002Fcheckout","docs\u002F03.analytics\u002F17.checkout","Every Shopify checkout opened, step submitted and order paid.",{"title":219,"path":220,"stem":221,"icon":18,"summary":222,"section":192,"highlights":18,"children":-1},"Carts","\u002Fdocs\u002Fanalytics\u002Fcarts","docs\u002F03.analytics\u002F18.carts","Every visit with a cart, and whether it was bought, abandoned or recovered later.",{"title":224,"path":225,"stem":226,"icon":18,"summary":227,"section":192,"highlights":18,"children":-1},"Items","\u002Fdocs\u002Fanalytics\u002Fitems","docs\u002F03.analytics\u002F19.items","Every item of every product list, cart, checkout and order.",{"title":229,"path":230,"stem":231,"icon":18,"summary":232,"section":192,"highlights":18,"children":-1},"Products","\u002Fdocs\u002Fanalytics\u002Fproducts","docs\u002F03.analytics\u002F20.products","Every product listed, viewed, added to a cart, bought or refunded.",{"title":234,"path":235,"stem":236,"icon":18,"summary":237,"section":192,"highlights":18,"children":-1},"Data layer events","\u002Fdocs\u002Fanalytics\u002Fdata-layer-events","docs\u002F03.analytics\u002F21.data-layer-events","Every event your site pushes to its data layer, with your own fields.",{"title":239,"path":240,"stem":241,"icon":18,"summary":242,"section":192,"highlights":18,"children":-1},"Campaigns","\u002Fdocs\u002Fanalytics\u002Fcampaigns","docs\u002F03.analytics\u002F22.campaigns","Each day of each campaign: visits, credited conversions, ad spend, cost per conversion and ROAS.",{"title":244,"path":245,"stem":246,"icon":18,"summary":247,"section":192,"highlights":18,"children":-1},"Campaign trends","\u002Fdocs\u002Fanalytics\u002Fcampaign-trends","docs\u002F03.analytics\u002F23.campaign-trends","Spend, cost per visit, cost per conversion and ROAS, against earlier weeks and the usual.",{"title":249,"path":250,"stem":251,"icon":18,"summary":252,"section":192,"highlights":18,"children":-1},"Attribution","\u002Fdocs\u002Fanalytics\u002Fattribution","docs\u002F03.analytics\u002F24.attribution","Every touchpoint of every conversion's 90-day journey, with each model's credit.",{"title":254,"path":255,"stem":256,"icon":18,"summary":257,"section":192,"highlights":18,"children":-1},"Cohorts","\u002Fdocs\u002Fanalytics\u002Fcohorts","docs\u002F03.analytics\u002F25.cohorts","Each new visitor in each week and month after their first visit: return rates and value.",{"title":259,"path":260,"stem":261,"icon":18,"summary":262,"section":192,"highlights":18,"children":-1},"Activity","\u002Fdocs\u002Fanalytics\u002Factivity","docs\u002F03.analytics\u002F26.activity","Active visitors by day, week and month, with growth accounting and stickiness.",{"title":264,"path":265,"stem":266,"icon":18,"summary":267,"section":192,"highlights":18,"children":-1},"Activation","\u002Fdocs\u002Fanalytics\u002Factivation","docs\u002F03.analytics\u002F27.activation","Each sign-up beside each key action: how many reach it, how fast, and whether they stay.",{"title":269,"path":270,"stem":271,"icon":18,"summary":272,"section":192,"highlights":18,"children":-1},"Feature usage","\u002Fdocs\u002Fanalytics\u002Ffeature-usage","docs\u002F03.analytics\u002F28.feature-usage","Which features active visitors use, how often, and who adopts them.",{"title":274,"path":275,"stem":276,"icon":18,"summary":277,"section":192,"highlights":18,"children":-1},"First visits","\u002Fdocs\u002Fanalytics\u002Ffirst-visits","docs\u002F03.analytics\u002F29.first-visits","Which first-visit features go with new visitors coming back.",{"title":279,"path":280,"stem":281,"icon":18,"summary":282,"section":192,"highlights":18,"children":-1},"First-visit paths","\u002Fdocs\u002Fanalytics\u002Ffirst-visit-paths","docs\u002F03.analytics\u002F30.first-visit-paths","The paths new visitors take on their first visit, and whether they came back.",{"title":284,"path":285,"stem":286,"icon":18,"summary":287,"section":192,"highlights":18,"children":-1},"Trends","\u002Fdocs\u002Fanalytics\u002Ftrends","docs\u002F03.analytics\u002F31.trends","Every visit KPI against last week, last year, the usual and an expected range.",{"title":289,"path":290,"stem":291,"icon":18,"summary":292,"section":192,"highlights":18,"children":-1},"Movers","\u002Fdocs\u002Fanalytics\u002Fmovers","docs\u002F03.analytics\u002F32.movers","What moved: each channel, landing page or device against last week and the usual.",{"title":294,"path":295,"stem":296,"icon":18,"summary":297,"section":298,"highlights":18,"children":-1},"Overview","\u002Fdocs\u002Fanalytics\u002Foverview-dashboard","docs\u002F03.analytics\u002F33.overview-dashboard","Traffic, active users and top content at a glance: the place to start.","Dashboard reference",{"title":300,"path":301,"stem":302,"icon":18,"summary":303,"section":298,"highlights":18,"children":-1},"Acquisition","\u002Fdocs\u002Fanalytics\u002Facquisition-dashboard","docs\u002F03.analytics\u002F34.acquisition-dashboard","Where people come from, what the ads cost and returned, and where each channel lands them.",{"title":305,"path":306,"stem":307,"icon":18,"summary":308,"section":298,"highlights":18,"children":-1},"Engagement","\u002Fdocs\u002Fanalytics\u002Fengagement-dashboard","docs\u002F03.analytics\u002F35.engagement-dashboard","How visits engage, the pages read and left, the clicks and forms acted on, and who comes back.",{"title":310,"path":311,"stem":312,"icon":18,"summary":313,"section":298,"highlights":18,"children":-1},"Conversion","\u002Fdocs\u002Fanalytics\u002Fconversion-dashboard","docs\u002F03.analytics\u002F36.conversion-dashboard","Whether visits convert, where the funnels lose them and how long a first conversion takes.",{"title":249,"path":315,"stem":316,"icon":18,"summary":317,"section":298,"highlights":18,"children":-1},"\u002Fdocs\u002Fanalytics\u002Fattribution-dashboard","docs\u002F03.analytics\u002F37.attribution-dashboard","Which channel gets credit for a conversion under first touch, linear and last touch, and the paths journeys take.",{"title":319,"path":320,"stem":321,"icon":18,"summary":322,"section":298,"highlights":18,"children":-1},"Retention and cohorts","\u002Fdocs\u002Fanalytics\u002Fretention-dashboard","docs\u002F03.analytics\u002F38.retention-dashboard","Whether new visitors come back, sign-ups activate and the audience grows, and what a new visitor is worth.",{"title":324,"path":325,"stem":326,"icon":18,"summary":327,"section":298,"highlights":18,"children":-1},"Audience","\u002Fdocs\u002Fanalytics\u002Faudience-dashboard","docs\u002F03.analytics\u002F39.audience-dashboard","Who your visitors are: where, on what, how often, and whether you know them.",{"title":329,"path":330,"stem":331,"icon":18,"summary":332,"section":298,"highlights":18,"children":-1},"Product and app usage","\u002Fdocs\u002Fanalytics\u002Fproduct-usage-dashboard","docs\u002F03.analytics\u002F40.product-usage-dashboard","Which features people use, which first visits lead to coming back, where they struggle and which pages are slow.",{"title":334,"path":335,"stem":336,"icon":18,"summary":337,"section":298,"highlights":18,"children":-1},"Trend and anomaly","\u002Fdocs\u002Fanalytics\u002Ftrends-dashboard","docs\u002F03.analytics\u002F41.trends-dashboard","What changed, whether it is unusual, what drove it, and what moved around a release or launch.",{"title":229,"path":339,"stem":340,"icon":18,"summary":341,"section":298,"highlights":18,"children":-1},"\u002Fdocs\u002Fanalytics\u002Fproducts-dashboard","docs\u002F03.analytics\u002F42.products-dashboard","Which products sell, and where shoppers drop off between viewing and buying.","i-lucide-chart-line","Ready-made dashboards and 21 explores over your events, on a semantic layer Kontala maintains.",[345,346,347,348],{"title":129,"to":130},{"title":135,"to":136},{"title":140,"to":141},{"title":166,"to":167},{"title":350,"path":351,"stem":352,"children":353,"icon":359,"summary":360,"section":18,"highlights":361},"CDP","\u002Fdocs\u002Fcdp","docs\u002F04.cdp\u002Findex",[354],{"title":355,"path":356,"stem":357,"icon":18,"summary":358,"section":294,"highlights":18,"children":-1},"CDP overview","\u002Fdocs\u002Fcdp\u002Foverview","docs\u002F04.cdp\u002F01.overview","Identity resolution, consent, real-time audiences and warehouse-native sync.","i-lucide-users","One resolved, consented profile that every module reads and writes.",[362],{"title":355,"to":356},{"title":364,"path":365,"stem":366,"children":367,"icon":373,"summary":374,"section":18,"highlights":375},"Personalisation","\u002Fdocs\u002Fpersonalisation","docs\u002F05.personalisation\u002Findex",[368],{"title":369,"path":370,"stem":371,"icon":18,"summary":372,"section":294,"highlights":18,"children":-1},"Personalisation overview","\u002Fdocs\u002Fpersonalisation\u002Foverview","docs\u002F05.personalisation\u002F01.overview","Next best action, decisioning, bandits, recommendations and journey experiments.","i-lucide-sparkles","The next best content, offer and channel for each person.",[376],{"title":369,"to":370},{"title":378,"path":379,"stem":380,"children":381,"icon":387,"summary":388,"section":18,"highlights":389},"CVM","\u002Fdocs\u002Fcvm","docs\u002F06.cvm\u002Findex",[382],{"title":383,"path":384,"stem":385,"icon":18,"summary":386,"section":294,"highlights":18,"children":-1},"CVM overview","\u002Fdocs\u002Fcvm\u002Foverview","docs\u002F06.cvm\u002F01.overview","Churn and lifetime value prediction, lifecycle orchestration and offer guardrails.","i-lucide-trending-up","Lifecycle value, optimised for margin rather than vanity metrics.",[390],{"title":383,"to":384},{"title":392,"path":393,"stem":394,"children":395,"icon":412,"summary":413,"section":18,"highlights":414},"Autonomy","\u002Fdocs\u002Fautonomy","docs\u002F07.autonomy\u002Findex",[396,402,407],{"title":397,"path":398,"stem":399,"icon":18,"summary":400,"section":401,"highlights":18,"children":-1},"Goals and guardrails","\u002Fdocs\u002Fautonomy\u002Fgoals-and-guardrails","docs\u002F07.autonomy\u002F01.goals-and-guardrails","Optimise for value, within limits the models cannot cross.","Control",{"title":403,"path":404,"stem":405,"icon":18,"summary":406,"section":401,"highlights":18,"children":-1},"Autonomy levels","\u002Fdocs\u002Fautonomy\u002Fautonomy-levels","docs\u002F07.autonomy\u002F02.autonomy-levels","Approve, suggest-only or fully autonomous, set per journey.",{"title":408,"path":409,"stem":410,"icon":18,"summary":411,"section":401,"highlights":18,"children":-1},"Explainability","\u002Fdocs\u002Fautonomy\u002Fexplainability","docs\u002F07.autonomy\u002F03.explainability","Every action is logged with the signals and reasoning behind it.","i-lucide-shield-check","Goals, guardrails and approval levels: you decide how much runs on its own.",[415,416,417],{"title":397,"to":398},{"title":403,"to":404},{"title":408,"to":409},{"title":419,"path":420,"stem":421,"children":422,"icon":461,"summary":462,"section":18,"highlights":463},"Developers","\u002Fdocs\u002Fdevelopers","docs\u002F08.developers\u002Findex",[423,429,435,440,445,450,455],{"title":424,"path":425,"stem":426,"icon":18,"summary":427,"section":428,"highlights":18,"children":-1},"Tag reference","\u002Fdocs\u002Fdevelopers\u002Ftag-reference","docs\u002F08.developers\u002F01.tag-reference","Every script attribute, JavaScript function, HTML attribute and cookie of Kontala's website tag.","Website",{"title":430,"path":431,"stem":432,"icon":18,"summary":433,"section":434,"highlights":18,"children":-1},"App SDKs","\u002Fdocs\u002Fdevelopers\u002Fsdks","docs\u002F08.developers\u002F02.sdks","Which app SDKs are available, and where to find each one's installation guide.","Apps and servers",{"title":436,"path":437,"stem":438,"icon":18,"summary":439,"section":434,"highlights":18,"children":-1},"Flutter SDK","\u002Fdocs\u002Fdevelopers\u002Fflutter-sdk","docs\u002F08.developers\u002F03.flutter-sdk","Install kontala_flutter, start it in main(), and check that events arrive.",{"title":441,"path":442,"stem":443,"icon":18,"summary":444,"section":434,"highlights":18,"children":-1},"Android SDK","\u002Fdocs\u002Fdevelopers\u002Fandroid-sdk","docs\u002F08.developers\u002F04.android-sdk","Add la.konta:kontala-android, start it in Application.onCreate, and check that events arrive.",{"title":446,"path":447,"stem":448,"icon":18,"summary":449,"section":434,"highlights":18,"children":-1},"iOS SDK","\u002Fdocs\u002Fdevelopers\u002Fios-sdk","docs\u002F08.developers\u002F05.ios-sdk","Add the kontala-ios package, start it as the app launches, and check that events arrive.",{"title":451,"path":452,"stem":453,"icon":18,"summary":454,"section":434,"highlights":18,"children":-1},"Events API","\u002Fdocs\u002Fdevelopers\u002Fevents-api","docs\u002F08.developers\u002F06.events-api","Send events from your servers and apps to Kontala, beside the website tag.",{"title":456,"path":457,"stem":458,"icon":18,"summary":459,"section":460,"highlights":18,"children":-1},"MCP server","\u002Fdocs\u002Fdevelopers\u002Fmcp","docs\u002F08.developers\u002F07.mcp","The MCP server for AI tools is not yet available.","AI tools","i-lucide-code-xml","The tag JavaScript API and attributes, the app SDKs, and the Events API.",[464,465,466],{"title":424,"to":425},{"title":430,"to":431},{"title":451,"to":452},{"title":468,"path":469,"stem":470,"children":471,"icon":484,"summary":485,"section":18,"highlights":486},"Security and privacy","\u002Fdocs\u002Fsecurity-and-privacy","docs\u002F09.security-and-privacy\u002Findex",[472,478],{"title":473,"path":474,"stem":475,"icon":18,"summary":476,"section":477,"highlights":18,"children":-1},"Data protection","\u002Fdocs\u002Fsecurity-and-privacy\u002Fdata-protection","docs\u002F09.security-and-privacy\u002F01.data-protection","Where events are stored, how long they are kept, and how visitors are protected.","Data",{"title":479,"path":480,"stem":481,"icon":18,"summary":482,"section":483,"highlights":18,"children":-1},"Access control","\u002Fdocs\u002Fsecurity-and-privacy\u002Faccess-control","docs\u002F09.security-and-privacy\u002F02.access-control","Sign-in, two-step verification, roles and write keys.","Access","i-lucide-lock","Where your data is stored, how long it is kept, and who in your team can do what.",[487,488],{"title":473,"to":474},{"title":479,"to":480},{"title":490,"path":491,"stem":492,"children":493,"icon":500,"summary":501,"section":18,"highlights":502},"Help and support","\u002Fdocs\u002Fsupport","docs\u002F10.support\u002Findex",[494],{"title":495,"path":496,"stem":497,"icon":18,"summary":498,"section":499,"highlights":18,"children":-1},"Contact us","\u002Fdocs\u002Fsupport\u002Fcontact-us","docs\u002F10.support\u002F01.contact-us","Talk to the Kontala team about setup, access or anything else.","Support","i-lucide-life-buoy","Get help from the Kontala team.",[503],{"title":495,"to":496},false,{"path":437,"title":436,"description":506,"summary":439,"icon":18,"section":434,"sections":18,"lastUpdated":507,"body":508},"Install kontala_flutter from pub.dev and capture screens, taps and events in your Flutter app on iOS and Android.","2026-10-17",{"type":509,"value":510,"toc":1403},"minimark",[511,519,524,537,545,549,560,567,571,599,606,635,638,642,657,735,738,743,753,808,823,827,831,834,845,854,858,869,872,899,903,906,935,938,941,945,949,1009,1016,1020,1029,1046,1050,1059,1062,1065,1072,1112,1121,1125,1128,1144,1164,1175,1205,1212,1216,1226,1230,1269,1273,1276,1396,1399],[512,513,514,518],"p",{},[515,516,517],"code",{},"kontala_flutter"," captures what people do in your Flutter app on iOS and Android, the way the website tag captures a site.\nIt records every screen they see, every control they tap, who signs in, what forms and searches sent, how far they scrolled, where they struggled, how fast each screen was, and your app's own events.",[520,521,523],"h2",{"id":522},"requirements","Requirements",[525,526,527,531,534],"ul",{},[528,529,530],"li",{},"Flutter 3.35 or later.",[528,532,533],{},"iOS 13 or later.",[528,535,536],{},"Android 7.0 (API 24) or later.",[512,538,539,540,544],{},"On the web, macOS, Windows and Linux the SDK does nothing.\nFor a website, ",[541,542,543],"a",{"href":65},"install the website tag"," instead.",[520,546,548],{"id":547},"_1-find-your-write-key","1. Find your write key",[512,550,551,552,555,556,559],{},"Open the property in Kontala and find its ",[553,554,451],"strong",{}," card.\nIt shows the property's write key (",[515,557,558],{},"pk_live_...",") and the Events API URL to send to.",[512,561,562,563,566],{},"The write key is public: every copy of your app carries it, as every page carries the tag's.\nNever put a server key (",[515,564,565],{},"ksk_live_...",") in an app.",[520,568,570],{"id":569},"_2-add-the-package","2. Add the package",[572,573,578],"pre",{"className":574,"code":575,"language":576,"meta":577,"style":577},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","flutter pub add kontala_flutter\n","bash","",[515,579,580],{"__ignoreMap":577},[581,582,585,589,593,596],"span",{"class":583,"line":584},"line",1,[581,586,588],{"class":587},"sBMFI","flutter",[581,590,592],{"class":591},"sfazB"," pub",[581,594,595],{"class":591}," add",[581,597,598],{"class":591}," kontala_flutter\n",[512,600,601,602,605],{},"Or add it to ",[515,603,604],{},"pubspec.yaml"," yourself:",[572,607,611],{"className":608,"code":609,"language":610,"meta":577,"style":577},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","dependencies:\n  kontala_flutter: ^0.4.0\n","yaml",[515,612,613,623],{"__ignoreMap":577},[581,614,615,619],{"class":583,"line":584},[581,616,618],{"class":617},"swJcz","dependencies",[581,620,622],{"class":621},"sMK4o",":\n",[581,624,626,629,632],{"class":583,"line":625},2,[581,627,628],{"class":617},"  kontala_flutter",[581,630,631],{"class":621},":",[581,633,634],{"class":591}," ^0.4.0\n",[512,636,637],{},"The package depends on nothing but Flutter, so it cannot cause a version conflict with your other packages.",[520,639,641],{"id":640},"_3-start-it","3. Start it",[512,643,644,645,648,649,652,653,656],{},"Call ",[515,646,647],{},"Kontala.init"," in ",[515,650,651],{},"main()",", before ",[515,654,655],{},"runApp",", and give every navigator an observer:",[572,658,662],{"className":659,"code":660,"language":661,"meta":577,"style":577},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import 'package:kontala_flutter\u002Fkontala_flutter.dart';\n\nvoid main() {\n  Kontala.init(\n    writeKey: 'pk_live_...',\n    endpoint: Uri.parse('https:\u002F\u002Fkonta.la\u002Fv1\u002Fevents'),\n  );\n  runApp(MaterialApp(\n    navigatorObservers: [Kontala.navigatorObserver()],\n    home: const HomePage(),\n  ));\n}\n","dart",[515,663,664,669,675,681,687,693,699,705,711,717,723,729],{"__ignoreMap":577},[581,665,666],{"class":583,"line":584},[581,667,668],{},"import 'package:kontala_flutter\u002Fkontala_flutter.dart';\n",[581,670,671],{"class":583,"line":625},[581,672,674],{"emptyLinePlaceholder":673},true,"\n",[581,676,678],{"class":583,"line":677},3,[581,679,680],{},"void main() {\n",[581,682,684],{"class":583,"line":683},4,[581,685,686],{},"  Kontala.init(\n",[581,688,690],{"class":583,"line":689},5,[581,691,692],{},"    writeKey: 'pk_live_...',\n",[581,694,696],{"class":583,"line":695},6,[581,697,698],{},"    endpoint: Uri.parse('https:\u002F\u002Fkonta.la\u002Fv1\u002Fevents'),\n",[581,700,702],{"class":583,"line":701},7,[581,703,704],{},"  );\n",[581,706,708],{"class":583,"line":707},8,[581,709,710],{},"  runApp(MaterialApp(\n",[581,712,714],{"class":583,"line":713},9,[581,715,716],{},"    navigatorObservers: [Kontala.navigatorObserver()],\n",[581,718,720],{"class":583,"line":719},10,[581,721,722],{},"    home: const HomePage(),\n",[581,724,726],{"class":583,"line":725},11,[581,727,728],{},"  ));\n",[581,730,732],{"class":583,"line":731},12,[581,733,734],{},"}\n",[512,736,737],{},"Use the write key and endpoint from your property's Events API card.\nNothing else is configured per screen.",[739,740,742],"h3",{"id":741},"apps-using-go_router","Apps using go_router",[512,744,745,748,749,752],{},[515,746,747],{},"MaterialApp.router"," ignores ",[515,750,751],{},"navigatorObservers",", so pass the observer to the router instead:",[572,754,756],{"className":659,"code":755,"language":661,"meta":577,"style":577},"final router = GoRouter(\n  observers: [Kontala.navigatorObserver()],\n  routes: [\n    ShellRoute(\n      observers: [Kontala.navigatorObserver()],\n      builder: (context, state, child) => AppShell(child: child),\n      routes: [\u002F* ... *\u002F],\n    ),\n  ],\n);\n",[515,757,758,763,768,773,778,783,788,793,798,803],{"__ignoreMap":577},[581,759,760],{"class":583,"line":584},[581,761,762],{},"final router = GoRouter(\n",[581,764,765],{"class":583,"line":625},[581,766,767],{},"  observers: [Kontala.navigatorObserver()],\n",[581,769,770],{"class":583,"line":677},[581,771,772],{},"  routes: [\n",[581,774,775],{"class":583,"line":683},[581,776,777],{},"    ShellRoute(\n",[581,779,780],{"class":583,"line":689},[581,781,782],{},"      observers: [Kontala.navigatorObserver()],\n",[581,784,785],{"class":583,"line":695},[581,786,787],{},"      builder: (context, state, child) => AppShell(child: child),\n",[581,789,790],{"class":583,"line":701},[581,791,792],{},"      routes: [\u002F* ... *\u002F],\n",[581,794,795],{"class":583,"line":707},[581,796,797],{},"    ),\n",[581,799,800],{"class":583,"line":713},[581,801,802],{},"  ],\n",[581,804,805],{"class":583,"line":719},[581,806,807],{},");\n",[512,809,810,811,814,815,818,819,822],{},"Give each ",[515,812,813],{},"ShellRoute"," and ",[515,816,817],{},"StatefulShellBranch"," with its own navigator a new observer.\nAn observer serves one navigator, so call ",[515,820,821],{},"Kontala.navigatorObserver()"," once per navigator.",[520,824,826],{"id":825},"_4-platform-setup","4. Platform setup",[739,828,830],{"id":829},"ios","iOS",[512,832,833],{},"No setup is needed.\nThe SDK ships an iOS privacy manifest, which Xcode adds to your app's privacy report.",[512,835,836,837,840,841,844],{},"If you want the IDFA, your app shows the App Tracking Transparency prompt, never the SDK.\nAdd ",[515,838,839],{},"NSUserTrackingUsageDescription"," to ",[515,842,843],{},"Info.plist",", then call this when your app chooses:",[572,846,848],{"className":659,"code":847,"language":661,"meta":577,"style":577},"await Kontala.requestTrackingAuthorization();\n",[515,849,850],{"__ignoreMap":577},[581,851,852],{"class":583,"line":584},[581,853,847],{},[739,855,857],{"id":856},"android","Android",[512,859,860,861,864,865,868],{},"No setup is needed.\nThe SDK adds the ",[515,862,863],{},"INTERNET"," permission and the ",[515,866,867],{},"AD_ID"," permission, so declare advertising ID use in Play Console.",[512,870,871],{},"If your app must not use the advertising ID, for example in Google Play's Families programme, remove the permission in your own manifest:",[572,873,877],{"className":874,"code":875,"language":876,"meta":577,"style":577},"language-xml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cmanifest xmlns:android=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\"\n    xmlns:tools=\"http:\u002F\u002Fschemas.android.com\u002Ftools\">\n  \u003Cuses-permission android:name=\"com.google.android.gms.permission.AD_ID\" tools:node=\"remove\" \u002F>\n\u003C\u002Fmanifest>\n","xml",[515,878,879,884,889,894],{"__ignoreMap":577},[581,880,881],{"class":583,"line":584},[581,882,883],{},"\u003Cmanifest xmlns:android=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\"\n",[581,885,886],{"class":583,"line":625},[581,887,888],{},"    xmlns:tools=\"http:\u002F\u002Fschemas.android.com\u002Ftools\">\n",[581,890,891],{"class":583,"line":677},[581,892,893],{},"  \u003Cuses-permission android:name=\"com.google.android.gms.permission.AD_ID\" tools:node=\"remove\" \u002F>\n",[581,895,896],{"class":583,"line":683},[581,897,898],{},"\u003C\u002Fmanifest>\n",[520,900,902],{"id":901},"_5-check-that-it-works","5. Check that it works",[512,904,905],{},"Start the app with debug logging on:",[572,907,909],{"className":659,"code":908,"language":661,"meta":577,"style":577},"Kontala.init(\n  writeKey: 'pk_live_...',\n  endpoint: Uri.parse('https:\u002F\u002Fkonta.la\u002Fv1\u002Fevents'),\n  options: KontalaOptions(debug: true),\n);\n",[515,910,911,916,921,926,931],{"__ignoreMap":577},[581,912,913],{"class":583,"line":584},[581,914,915],{},"Kontala.init(\n",[581,917,918],{"class":583,"line":625},[581,919,920],{},"  writeKey: 'pk_live_...',\n",[581,922,923],{"class":583,"line":677},[581,924,925],{},"  endpoint: Uri.parse('https:\u002F\u002Fkonta.la\u002Fv1\u002Fevents'),\n",[581,927,928],{"class":583,"line":683},[581,929,930],{},"  options: KontalaOptions(debug: true),\n",[581,932,933],{"class":583,"line":689},[581,934,807],{},[512,936,937],{},"The log shows every event as it is captured, and every event the API refused, with its reason.",[512,939,940],{},"A debug or profile build, and any build in a simulator or emulator, marks its events as a developer's.\nKontala leaves them out of visitor counts by default, as it does for a development server.",[520,942,944],{"id":943},"optional-setup","Optional setup",[739,946,948],{"id":947},"name-screens-and-mark-controls","Name screens and mark controls",[950,951,952,965],"table",{},[953,954,955],"thead",{},[956,957,958,962],"tr",{},[959,960,961],"th",{},"Widget",[959,963,964],{},"Does",[966,967,968,979,989,999],"tbody",{},[956,969,970,976],{},[971,972,973],"td",{},[515,974,975],{},"KontalaScreen(name:, pageType:, properties:)",[971,977,978],{},"Declares the screen a route shows: its name, page type and data",[956,980,981,986],{},[971,982,983],{},[515,984,985],{},"KontalaEvent(type:)",[971,987,988],{},"Declares the click type of a control, or of every control under it",[956,990,991,996],{},[971,992,993],{},[515,994,995],{},"KontalaMask",[971,997,998],{},"A tap under it is sent as its role alone: no id, label, text or class",[956,1000,1001,1006],{},[971,1002,1003],{},[515,1004,1005],{},"KontalaIgnore",[971,1007,1008],{},"Nothing under it is captured",[512,1010,1011,1012,1015],{},"Text under Flutter's ",[515,1013,1014],{},"SensitiveContent"," is never read, and a text field never sends what is typed into it.",[739,1017,1019],{"id":1018},"identify-signed-in-users","Identify signed-in users",[572,1021,1023],{"className":659,"code":1022,"language":661,"meta":577,"style":577},"Kontala.identify(user: 'customer-42', org: 'acme', traits: {'plan': 'pro'});\n",[515,1024,1025],{"__ignoreMap":577},[581,1026,1027],{"class":583,"line":584},[581,1028,1022],{},[512,1030,1031,1032,1035,1036,1039,1040,648,1043,1045],{},"Every later event carries the user and organisation.\nCall ",[515,1033,1034],{},"Kontala.identify()"," with neither to log out, or ",[515,1037,1038],{},"Kontala.reset()"," to also forget the install and session.\nWhen your app restores a signed-in session at launch, call ",[515,1041,1042],{},"identify",[515,1044,651],{}," so the first screen view carries it.",[739,1047,1049],{"id":1048},"track-your-own-events","Track your own events",[572,1051,1053],{"className":659,"code":1052,"language":661,"meta":577,"style":577},"Kontala.track('wishlisted', {'product_id': '42'});\n",[515,1054,1055],{"__ignoreMap":577},[581,1056,1057],{"class":583,"line":584},[581,1058,1052],{},[512,1060,1061],{},"Custom events arrive while the property's data layer captures the Events API's events.",[739,1063,106],{"id":1064},"consent",[512,1066,1067,1068,1071],{},"The SDK starts with consent ",[515,1069,1070],{},"granted",".\nTo wait for your consent banner instead, start undecided and answer when the visitor chooses:",[572,1073,1075],{"className":659,"code":1074,"language":661,"meta":577,"style":577},"Kontala.init(\n  writeKey: 'pk_live_...',\n  endpoint: Uri.parse('https:\u002F\u002Fkonta.la\u002Fv1\u002Fevents'),\n  options: KontalaOptions(consent: KontalaConsent.unknown),\n);\n\n\u002F\u002F Later, from your banner:\nKontala.consent(KontalaConsent.granted);\n",[515,1076,1077,1081,1085,1089,1094,1098,1102,1107],{"__ignoreMap":577},[581,1078,1079],{"class":583,"line":584},[581,1080,915],{},[581,1082,1083],{"class":583,"line":625},[581,1084,920],{},[581,1086,1087],{"class":583,"line":677},[581,1088,925],{},[581,1090,1091],{"class":583,"line":683},[581,1092,1093],{},"  options: KontalaOptions(consent: KontalaConsent.unknown),\n",[581,1095,1096],{"class":583,"line":689},[581,1097,807],{},[581,1099,1100],{"class":583,"line":695},[581,1101,674],{"emptyLinePlaceholder":673},[581,1103,1104],{"class":583,"line":701},[581,1105,1106],{},"\u002F\u002F Later, from your banner:\n",[581,1108,1109],{"class":583,"line":707},[581,1110,1111],{},"Kontala.consent(KontalaConsent.granted);\n",[512,1113,1114,1117,1118,1120],{},[515,1115,1116],{},"Kontala.optOut(true)"," stops all capture, sending and storage on the device, across launches.\nSee ",[541,1119,106],{"href":107}," for how Kontala treats each state.",[739,1122,1124],{"id":1123},"web-pages-in-the-app","Web pages in the app",[512,1126,1127],{},"If your app shows pages of your website in a WebView, the SDK shares its visitor and visit with them, so one person is counted once.\nFor the closest link, also add the package for your WebView:",[572,1129,1131],{"className":574,"code":1130,"language":576,"meta":577,"style":577},"flutter pub add kontala_flutter_webview\n",[515,1132,1133],{"__ignoreMap":577},[581,1134,1135,1137,1139,1141],{"class":583,"line":584},[581,1136,588],{"class":587},[581,1138,592],{"class":591},[581,1140,595],{"class":591},[581,1142,1143],{"class":591}," kontala_flutter_webview\n",[572,1145,1147],{"className":659,"code":1146,"language":661,"meta":577,"style":577},"final controller = WebViewController()..setJavaScriptMode(JavaScriptMode.unrestricted);\nfinal attachment = await KontalaWebViewFlutter.attach(controller);\nawait controller.loadRequest(Uri.parse('https:\u002F\u002Fshop.example.com\u002Fsize-guide'));\n",[515,1148,1149,1154,1159],{"__ignoreMap":577},[581,1150,1151],{"class":583,"line":584},[581,1152,1153],{},"final controller = WebViewController()..setJavaScriptMode(JavaScriptMode.unrestricted);\n",[581,1155,1156],{"class":583,"line":625},[581,1157,1158],{},"final attachment = await KontalaWebViewFlutter.attach(controller);\n",[581,1160,1161],{"class":583,"line":677},[581,1162,1163],{},"await controller.loadRequest(Uri.parse('https:\u002F\u002Fshop.example.com\u002Fsize-guide'));\n",[512,1165,1166,1167,1170,1171,1174],{},"For ",[515,1168,1169],{},"flutter_inappwebview",", use ",[515,1172,1173],{},"kontala_flutter_inappwebview"," instead:",[572,1176,1178],{"className":659,"code":1177,"language":661,"meta":577,"style":577},"InAppWebView(\n  initialUserScripts: UnmodifiableListView([KontalaInAppWebView.userScript]),\n  initialUrlRequest: URLRequest(url: WebUri('https:\u002F\u002Fshop.example.com\u002Fsize-guide')),\n  onWebViewCreated: (controller) => attachment = KontalaInAppWebView.attach(controller),\n)\n",[515,1179,1180,1185,1190,1195,1200],{"__ignoreMap":577},[581,1181,1182],{"class":583,"line":584},[581,1183,1184],{},"InAppWebView(\n",[581,1186,1187],{"class":583,"line":625},[581,1188,1189],{},"  initialUserScripts: UnmodifiableListView([KontalaInAppWebView.userScript]),\n",[581,1191,1192],{"class":583,"line":677},[581,1193,1194],{},"  initialUrlRequest: URLRequest(url: WebUri('https:\u002F\u002Fshop.example.com\u002Fsize-guide')),\n",[581,1196,1197],{"class":583,"line":683},[581,1198,1199],{},"  onWebViewCreated: (controller) => attachment = KontalaInAppWebView.attach(controller),\n",[581,1201,1202],{"class":583,"line":689},[581,1203,1204],{},")\n",[512,1206,1207,1208,1211],{},"Attach a WebView before its first page loads, and call ",[515,1209,1210],{},"detach()"," on the attachment when the WebView goes.\nThe attached page takes the app's consent and signed-in user.",[520,1213,1215],{"id":1214},"widget-tests","Widget tests",[512,1217,1218,1219,1221,1222,1225],{},"In a widget test, leave ",[515,1220,647],{}," out, or call ",[515,1223,1224],{},"Kontala.stop()"," before the test ends.\nOtherwise flutter_test fails the test for leaving a timer pending.",[520,1227,1229],{"id":1228},"troubleshooting","Troubleshooting",[525,1231,1232,1245,1251,1257,1263],{},[528,1233,1234,1241,1242,1244],{},[553,1235,1236,1237,1240],{},"Every screen is ",[515,1238,1239],{},"\u002F","."," Add ",[515,1243,821],{}," to your app's navigators.",[528,1246,1247,1250],{},[553,1248,1249],{},"No taps arrive."," Turn clicks on for the property in Kontala.",[528,1252,1253,1256],{},[553,1254,1255],{},"No custom events arrive."," The property's data layer is off, or its capture rules do not include the Events API.",[528,1258,1259,1262],{},[553,1260,1261],{},"Every row reads as a developer's."," It is a debug or profile build, or a simulator or emulator.",[528,1264,1265,1268],{},[553,1266,1267],{},"Nothing arrives at all."," The write key is wrong or revoked, or the app cannot reach the endpoint. Events wait in the app's queue until it can.",[520,1270,1272],{"id":1271},"app-store-privacy-forms","App store privacy forms",[512,1274,1275],{},"What the SDK sends is yours to declare in the App Store privacy label and the Google Play data safety form:",[950,1277,1278,1291],{},[953,1279,1280],{},[956,1281,1282,1285,1288],{},[959,1283,1284],{},"App Store privacy label",[959,1286,1287],{},"Google Play data safety form",[959,1289,1290],{},"What the SDK sends",[966,1292,1293,1304,1319,1330,1341,1352,1363,1374,1385],{},[956,1294,1295,1298,1301],{},[971,1296,1297],{},"Identifiers: Device ID",[971,1299,1300],{},"Device or other IDs",[971,1302,1303],{},"A random install id; on consented events, the IDFV and (if authorised) IDFA, or Android ID, App Set ID and advertising ID",[956,1305,1306,1309,1312],{},[971,1307,1308],{},"Identifiers: User ID",[971,1310,1311],{},"Personal info: User IDs",[971,1313,1314,1315,1318],{},"The ids ",[515,1316,1317],{},"Kontala.identify"," names",[956,1320,1321,1324,1327],{},[971,1322,1323],{},"Contact info: Email address",[971,1325,1326],{},"Personal info: Email address",[971,1328,1329],{},"The email a login names",[956,1331,1332,1335,1338],{},[971,1333,1334],{},"Usage data: Product interaction",[971,1336,1337],{},"App activity: App interactions",[971,1339,1340],{},"Screens, taps, swipes, scroll depth, time on screen and your events",[956,1342,1343,1346,1349],{},[971,1344,1345],{},"Search history",[971,1347,1348],{},"App activity: In-app search history",[971,1350,1351],{},"What a search looked for",[956,1353,1354,1357,1360],{},[971,1355,1356],{},"User content: Other user content",[971,1358,1359],{},"App activity: Other user-generated content",[971,1361,1362],{},"What your app's forms sent",[956,1364,1365,1368,1371],{},[971,1366,1367],{},"Diagnostics: Performance data",[971,1369,1370],{},"App info and performance: Other app performance data",[971,1372,1373],{},"How fast each screen was",[956,1375,1376,1379,1382],{},[971,1377,1378],{},"Diagnostics: Other diagnostic data",[971,1380,1381],{},"App info and performance: Diagnostics",[971,1383,1384],{},"Uncaught errors, and rage and dead taps",[956,1386,1387,1390,1393],{},[971,1388,1389],{},"Location: Coarse location",[971,1391,1392],{},"Location: Approximate location",[971,1394,1395],{},"Country, region and city, derived from each request's address",[512,1397,1398],{},"Each is used for analytics and linked to the user where your app identifies them.\nNone is used for tracking: the IDFA goes to Kontala alone and is never joined with another company's data.",[1400,1401,1402],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}",{"title":577,"searchDepth":625,"depth":625,"links":1404},[1405,1406,1407,1408,1411,1415,1416,1423,1424,1425],{"id":522,"depth":625,"text":523},{"id":547,"depth":625,"text":548},{"id":569,"depth":625,"text":570},{"id":640,"depth":625,"text":641,"children":1409},[1410],{"id":741,"depth":677,"text":742},{"id":825,"depth":625,"text":826,"children":1412},[1413,1414],{"id":829,"depth":677,"text":830},{"id":856,"depth":677,"text":857},{"id":901,"depth":625,"text":902},{"id":943,"depth":625,"text":944,"children":1417},[1418,1419,1420,1421,1422],{"id":947,"depth":677,"text":948},{"id":1018,"depth":677,"text":1019},{"id":1048,"depth":677,"text":1049},{"id":1064,"depth":677,"text":106},{"id":1123,"depth":677,"text":1124},{"id":1214,"depth":625,"text":1215},{"id":1228,"depth":625,"text":1229},{"id":1271,"depth":625,"text":1272},{"sections":1427},[428,434,460],[1429,1430],{"title":430,"path":431,"stem":432,"summary":433,"children":-1},{"title":441,"path":442,"stem":443,"summary":444,"children":-1},1792244330938]