Analytics in Odia gives you a complete picture of your business performance. It is organized into six tabs, each focused on a different aspect of your operations.
Business Overview
How well you turn Journeys into confirmed bookings, plus revenue, cost, and margin
Agencies
Revenue earned and commission owed to travel agents
Travelers
Traveler volume, returning guests, and trip patterns
Financial
Revenue, cost, margin, and payment collection across all trips
Services
Which services are used most and how they perform
Suppliers
Supplier usage and spending patterns
Access: Any role can open Business Overview. Travelers and Services also work for any role, if your plan includes them. Agencies, Financial, and Suppliers additionally require the Owner role. Within Business Overview itself, only Owner can view whole-team or per-member data — User, Supervisor, and Admin always see their own performance only.
All analytics tabs automatically exclude archived Journeys and trips. If you archive a Journey, it will no longer appear in any analytics numbers.Archived data is filtered out across all tabs consistently, so your metrics always reflect your active business.
Archiving is permanent for analytics. Once you archive a Journey or trip, it disappears from all analytics tabs. Make sure you only archive items you truly want to remove from your reports.
Only the Owner role can view whole-team or per-member data here. User, Supervisor, and Admin all see their own performance and financials only — there is no elevated Admin or Supervisor tier on this page.
Role
What they see
User, Supervisor, Admin
Their own data only. The scope control is replaced with static “My performance” text.
Owner
A scope selector: Whole team (default), a specific team member, or Unassigned
North star metrics (KPI cards, for the selected date range and scope):
Metric
What it means
Journeys created
Total Journeys created in the period
Confirmed from these Journeys
How many of those Journeys became confirmed bookings
Conversion
Confirmed ÷ Journeys created
Average time to confirm
Average days from creation to confirmation, across Journeys that have confirmed
Journeys created chart — an area chart of Journeys created over time. Toggle between Week and Month grain. A caption below the chart calls out the busiest week or month.Team performance table (Owner, Whole team scope only) — the same four metrics broken down one row per team member, plus a highlighted “Whole team” summary row. Sortable by any column.
Monthly Revenue, Cost, and Margin chart — one combined chart with one point per month, for the currently selected scope, date range, and Financial-lens filters. It plots five series:
Series
Shown as
Axis
Revenue
Filled area
Left — Amount, in your account currency
Cost
Filled area
Left — Amount
Total Earnings
Line (thicker, with dots)
Left — Amount
Net Margin
Line
Left — Amount
Margin %
Dashed line
Right — Margin %
Margin % gets its own right-hand axis because a percentage and currency amounts don’t share a sensible scale. The left axis shows rounded, compact amounts (e.g. $12.3K); hover over any point to see a tooltip with the exact value for all five series at that month, plus a legend below the chart identifying each series by color. Once a date range spans more than 24 months, the x-axis groups points by quarter instead of by month.
Unlike the Performance lens, the Financial lens has no KPI cards. Totals only appear in the “Whole team” row of the Team financial performance table below.
Team financial performance table (Owner, Whole team scope only) — one row per team member, plus an “Unassigned” row and a “Whole team” summary row:
Column
What it means
Journeys
Number of Journeys
Revenue
Total customer revenue
Cost
Total supplier cost
Gross margin / Gross margin %
Revenue minus cost
TA Commission
Commission owed to travel agents
Net margin / Net margin %
Gross margin minus TA Commission
Total Earnings
Combined earnings figure
Avg net/Journey
Net margin divided by Journey count
Average invoice
Average invoice value
Missing costs
Number of services with a price but no recorded cost
How each column is actually calculated
Journeys. Counts every Confirmed Journey in scope.Revenue. The total selling price (converted to your base currency) of every active service on those Journeys. Services where the client pays the supplier directly are excluded, since they don’t generate revenue for you.Cost. The total supplier cost of that same set of services.Gross margin / Gross margin %. Revenue minus Cost. The percentage divides that by Revenue.TA Commission. The commission owed to travel agents on those services — using each service’s own commission rate where one was set, or the Journey’s default rate otherwise — plus any supplier commission that is already netted off cost or still to be collected. Whether commission is calculated on the full selling price or on a net-of-charges basis is a setting on the Journey, not on individual services.Net margin / Net margin %. Gross margin minus TA Commission and any already-netted supplier commission. The percentage divides that by Revenue.Total Earnings. Net margin plus any supplier commission that is still outstanding to collect.Avg net/Journey. Net margin divided by the number of Journeys in that row.Average invoice. The average value of invoices issued in the selected date range, based on the invoice’s creation date — not the Journey’s dates or status. Because this is a different population than the Journeys column, it can include Journeys that wouldn’t otherwise count toward Journeys, or exclude Confirmed Journeys that haven’t been invoiced yet. Don’t expect Average invoice to reconcile cleanly against Revenue ÷ Journeys.Missing costs. How many Journeys in that row have at least one active service with a known selling price but no recorded cost, so that service’s margin can’t be calculated.
Missing costs. Select a value in the Missing costs column to open a dedicated page listing the services (from the Journeys in scope) that have a known selling price but no recorded cost. Each row names the service and its Journey, so you can open that Journey and add the missing cost.
Date range — always available; the label switches between “Created date” (Performance) and “Journey date” / “Booking date” (Financial)
Journey Date vs. Booking Date (Financial lens only) — Journey Date filters by the Journey’s travel dates; Booking Date filters by the date the Journey was confirmed
Include Zero-margin (Financial lens only, on by default) — controls whether zero-margin (passthrough) services are included in the same columns
Scope (Owner only) — Whole team, a specific member, or Unassigned
Zero-margin changes what gets summed into Revenue, Cost, TA Commission, and every other column above — it doesn’t run a separate report, it widens or narrows the same one.There is no cancelled-service filter here. Whether a cancelled service counts is decided per service in Journey Financials (see Cancelled Services), and every column above inherits that decision.
Owners viewing Whole team scope can export the Team performance table, the Journeys-created trend, or the Team financial performance table as XLSX or CSV. Exports always include the complete table, not just the currently visible or sorted rows.
Owner only. Unlike Business Overview, no other role can open this tab.
Understand how much revenue your travel agent partners generate and how much commission is owed to them. It has two lenses — Agencies and Travel Agents — switched with a toggle at the top of the tab.
Total revenue across agency-linked Journeys in the period
Total TA Commission
Total commission owed across those Journeys
Active Agencies
Number of agencies with activity in the period
Top revenue
The single agency with the highest revenue
Highest converter
The agency with the best conversion rate, among agencies with at least 5 Journeys
Monthly trend chart — revenue and TA Commission plotted by month, same style as the Business Overview financial chart.Performance ranking chart — a bar chart of the top 20 agencies. Two buttons let you switch what it ranks by: Revenue or Conversion. In Conversion mode, it only ranks agencies that have a conversion rate at all (any volume, not just the 5+ Journey minimum used for the “Highest converter” KPI card).Agency performance table — one row per agency: Agency, Parent Agency, Journeys, Confirmed Journeys, Conversion %, Travel Agents (count), Revenue, TA Commission. Searchable, sortable, and rows can be selected — export either your selection or the full filtered table.Filters:
Period — This Year, a prior year, All Time, or a custom date range
Date mode — Journey Date or Created Date
Agency — a searchable dropdown to focus on one agency
Total revenue across this agent’s Journeys in the period
Total TA Commission
Earned plus projected commission combined
Active Travel Agents
Number of individual agents with activity in the period
Top revenue
The single travel agent with the highest revenue
Highest converter
The agent with the best conversion rate, among agents with at least 5 proposals
Monthly trend chart, with an optional projections chart alongside it.Performance ranking chart — the same Revenue/Conversion bar chart as the Agencies lens, scoped to individual travel agents (labeled by Proposal rather than Journey for conversion).Travel agent reporting table — one row per travel agent: Travel Agent, Agency, Proposal conversion, Revenue, Total TA Commission, Avg TA Commission Rate, Journeys. Scrolls to load more rows, and is exportable.Filters:
Period — same options as the Agencies lens
Date mode — Journey Date (travel dates) or Booking Date (the date the Journey was confirmed)
Travel agent — a searchable dropdown to focus on one agent
There’s no toggle on this tab. Revenue and sale TA Commission follow the Include/Exclude choice recorded on each cancelled service in Journey Financials — a cancelled service with no choice recorded is excluded. See Cancelled Services in the Financial tab below for the full explanation.Supplier commission and agent splits are the exception: they are obligations, not sales, so they keep counting toward Total TA Commission even when the service is cancelled and excluded from revenue. They stop only when someone voids the commission.
Distinct travelers in the period — see “What counts as a traveler” below
Total Journeys
Total Journeys in the period
Total Spending
Total revenue across those Journeys
Avg Journey Value
Total Spending ÷ Total Journeys
Each card shows a trend vs. an equal-length immediately preceding period (e.g. this month vs. last month) — not shown when viewing All Time, since there’s no equivalent prior period to compare against.
Travelers and Journey value by month — a monthly chart combining Spending (area) and Journeys (bar). Unlike the Business Overview charts, there’s no week/month grain toggle here — it’s always monthly.Below that, a Traveler Insights section with three more charts:
A switchable Group size / Spend-per-person chart
Journeys by month — a bar chart of Journey counts
New vs returning travelers — bars for new and repeat traveler counts, plus a repeat-rate percentage line
A leaderboard of your top 5 repeat primary travelers: anyone who was the primary contact on 2 or more Journeys in the period, ranked by Journey count. Each row shows their rank, name, organization (if set), Journey count, and total spending. A co-traveler who was never the primary contact on a Journey won’t show up here, even if they’ve travelled many times.
The full table, one row per primary traveler: name, email, organization, total/completed/upcoming Journeys, total spending, average Journey value, last Journey date, and destinations. This is the only part of the tab that can be exported (XLSX).
It depends which part of the tab you’re looking at:
Total Travelers (KPI card) and the New vs returning travelers chart count every distinct person on a Journey — co-travelers included, not just the primary contact.
The Top Returning Travelers leaderboard and the Top Primary Travelers table only count the Journey’s primary traveler — its client contact. This is deliberate: these two views rank people by revenue, and crediting a Journey’s spending to every co-traveler would multiply the same revenue across several people. A co-traveler who is never a Journey’s primary contact won’t appear in either.
What counts as a "Journey" here
Only Confirmed or Accepted Journeys that aren’t archived. This isn’t a filter you can change on this tab — Journeys in other statuses never appear in Travelers numbers.
How "New" vs "Returning" is decided
A traveler counts as New in the month of their very first Journey in your entire Odia history — not just their first appearance within whatever period you’ve currently selected.This means: if you filter to last month and see “3 new travelers,” that’s genuinely their first-ever Journey with you. It also means a traveler can never show as “New” twice, and if their real first trip was before your selected range, they’ll always show as “Returning” even if it’s the only Journey visible in your current filter.
Period — This Year, Last Year, a specific year, All Time, or a custom range
Team member (Owner only) — narrow to one person’s travelers instead of the whole company
There’s no trip-date/booking-date toggle here, unlike Agencies and Financial. Every chart and table on this tab is filtered by the Journey’s travel start date — when does the traveler go, not when did you confirm the deal.
The most detailed financial view. Shows revenue, cost, margin, commission, and payment collection for every trip.
KPI Cards
Metric
What It Tells You
Revenue
Total selling price across all trips
Cost
Total supplier cost
Net Margin
Revenue minus cost minus commission, the actual profit
Invoiced
Total amount from non-cancelled invoices sent to clients
Commission
Total commission owed to travel agents
Collection Rate
How much of the revenue has been paid by clients
Each KPI also shows a trend indicator in the top-right corner — a green arrow (up) or red arrow (down) with a percentage. This is the change vs. the equivalent previous period of the same length: if you’re viewing Jan–Dec 2025, it compares against Jan–Dec 2024; if you pick a custom 3-month range, it compares against the 3 months immediately before it. The indicator is hidden when the change is less than 0.1% (too small to be meaningful) and is not shown when viewing All Time (no comparable previous period).Collection Rate is calculated as total payments logged ÷ total revenue. It is based entirely on payments that are manually recorded against invoices — there is no automatic payment detection. If no payments have been logged for a trip, its collection rate is 0% regardless of what was actually paid. To keep this accurate, log payments on each invoice as they come in.
How Collection Rate Works
Collection rate = total collected ÷ total revenue.
Total collected is the sum of all payment entries recorded on non-cancelled invoices for the selected trips.
Payments are manually logged — a user must open an invoice and record each payment (amount, date, and optional notes).
There is no integration with payment processors; nothing is tracked automatically.
Cancelled invoices and their payments are excluded from the calculation.
If you have received money but haven’t logged it against an invoice, the collection rate will underreport your actual collections.
Confirmed Journey Financial Table
A detailed table listing every trip with:
Revenue, cost, and margin per trip
Commission amount
Amount collected vs. outstanding
Cost data coverage indicator (full, partial, or none)
You can search by trip name, sort by any column, and export to Excel.
Financial Trends Chart
Monthly chart showing:
Revenue and cost as area charts
Net margin as a line
Margin percentage as a secondary axis
Helps you spot months with high revenue but low margin, or identify cost trends.
Filters
Period selector - This year, last year, all time, specific year, or custom date range
Trip Date vs. Booking Date - Choose whether to filter by when the trip takes place or by the date the Journey was confirmed
Zero-margin Services - Toggle to exclude services sold at cost with no markup (see below)
There is no Analytics-wide cancelled-service filter. You decide per service, once, in Journey Financials — and every financial report follows that decision.
When you cancel a service you choose how it should be treated financially: Include in revenue or Exclude from revenue. A cancelled service with no choice recorded is excluded, which matches the previous default.That single per-service choice is inherited by the Financial tab, the Business Overview Financial lens, the Agencies tab’s revenue and sale TA Commission, agency performance, and any export derived from them. Zero-margin remains the only service-level financial filter left in Analytics.
How each surface treats cancellations
Surface
How it handles cancellations
Why
Financial
Follows each service’s Include/Exclude choice
The choice belongs to the service, not to the report
Business Overview → Financial
Same choice, same figures
It reads the same source as the Financial tab
Agencies
Revenue and sale commission follow the same choice
Agencies must reconcile with Journey Financials
Supplier commission & agent splits
Kept until explicitly voided
A cancelled booking can still owe you commission
Business Overview → Performance
Counts “cancelled” as a lost Journey
It’s about Journey outcomes, not individual services
Travelers
Always excludes cancelled
Only counts actual trips taken
Service delivery metrics
Always status-based
Operational reporting, not money
Operational counts stay status-based everywhere: a cancelled service is still counted as cancelled on boards, calendars, and delivery metrics regardless of how it is treated on the books.
Example
A journey has four services:
Service
Status
Financial treatment
Counts toward revenue?
Hotel — $6,000
Active
n/a
Yes
Transfer — $2,000
Cancelled
Include in revenue
Yes
Tour — $1,500
Cancelled
Exclude from revenue
No
Dinner — $500
Cancelled
Not set
No
On-book revenue is $8,000 — the active hotel plus the cancelled transfer you chose to keep. Cost, margin, sale TA Commission, and cost coverage use the same two services.The journey still shows three cancelled services in operational reporting. And if the cancelled tour had a supplier commission you are still owed, that commission keeps appearing in supplier totals until someone voids it.
Why did Analytics not update immediately?
Journey Financials recalculates the moment you change a service’s treatment. The Analytics tabs, agency performance, and Agencies figures read a nightly snapshot, so they show the new figure after the next refresh. This is expected — the two are not disagreeing, one is simply newer.
Some services are passed through to the client at cost, with no markup (e.g., administrative fees, transfers billed at the exact supplier price). These are called zero-margin services because their selling price equals the supplier cost.By default, zero-margin services are included in all financial calculations. This means your revenue, cost, and totals match exactly what you see on each trip’s Pricing tab.Turn off the “Zero-margin Services” toggle to exclude them. This is useful when you want to:
Focus on margin-generating business — see only services where you earn a markup
Analyze true profitability — understand your margins without at-cost services diluting the percentages
How does this affect the numbers?
When you exclude zero-margin services:
Revenue drops — the selling price of at-cost services is removed
Cost drops — the supplier cost of those same services is removed
Net margin stays the same — because these services had zero margin, removing them doesn’t change your actual profit
Zero-margin ON (default)
Zero-margin OFF
Revenue
$100,000
$85,000
Cost
$78,000
$63,000
Net Margin
$22,000
$22,000
Margin %
22%
25.9%
Notice the margin percentage increases when at-cost services are excluded, because you’re measuring against a smaller revenue base.
Why do the numbers match my Pricing tab when this is ON?
The Pricing tab on each trip always shows all services — it doesn’t have a zero-margin filter. When the Financial tab has “Zero-margin Services” turned on (the default), both views include the same services, so the revenue and cost will match.If you turn zero-margin services off in analytics, the Financial tab will show lower revenue and cost than the Pricing tab. This is expected — the analytics is filtering out at-cost services while the Pricing tab always shows everything.
The Invoiced, Collected, and Outstanding metrics reflect actual invoice documents and payments — they are not affected by a service’s financial treatment or by the Zero-margin filter.This means:
Changing a cancelled service to Include or Exclude changes Revenue, Cost, and Margin but not Invoiced or Collected
Invoiced may be higher than Revenue if services were cancelled and excluded after invoices were sent
Invoiced may be lower than Revenue if not all services have been invoiced yet
Example
A trip has 10,000inservicesandone2,000 service was cancelled after being invoiced.
Metric
Cancelled service excluded
Cancelled service included
Revenue
$8,000
$10,000
Invoiced
$10,000
$10,000
Outstanding
$10,000 - collected
$10,000 - collected
Invoiced stays at $10,000 in both cases because the invoice document was already sent. If the money is genuinely not owed, credit or cancel the invoice — changing the service’s financial treatment does not alter invoice documents.
Understand which Library services get scheduled most, and how each one performs financially. Unlike the other tabs, there’s no chart here — just one table.
One row per unique Library service — not per booking, not per category. The heading above the table reads “N unique services,” with a tooltip clarifying: “Each Service is counted once, even when it is scheduled on many Journeys.”
Column
What it means
Service
Title, plus a note if it’s a variant of another service, and its category
Journeys with this service
Number of distinct Journeys that include it (one Journey can include the same service more than once, but this only counts distinct Journeys)
Revenue
Total selling price this service has generated
Cost
Total supplier cost for this service
Attributable earnings (+ %)
This service’s share of earnings
Cost coverage %
How much of this service’s occurrences have a recorded cost
Avg. guests
Average number of guests per occurrence
Sorted by Journeys with this service (descending) by default, 12 rows per page.
A service only counts toward Journeys, Revenue, and Cost here once its Journey is genuinely Confirmed (has a confirmation date) — an Accepted-but-not-yet-Confirmed Journey doesn’t count yet, which is narrower than some other tabs. A cancelled or client-direct occurrence of the service is also excluded.
Service date — the same period selector used elsewhere (This Year, Last Year, custom range, etc.)
Category — a single-select dropdown to narrow to one category
Team member (Owner only)
There’s no area/destination, supplier, or free-text search filter on this tab.
Category matching is by name and parent category, not by a fixed internal ID — this handles a tenant having its own category row that duplicates a global one. One side effect: if you rename a category so its name and parent match a different category, their Services tab counts will merge under that filter.
Several tabs offer a choice between two date modes:
Trip Date
Filter by when the trip takes place. Use this to see what’s happening in a specific travel season.Example: “Show me all trips happening in July 2026”
Booking Date
Filter by the date the Journey was confirmed — the day its status changed to Confirmed. Use this to see when revenue was actually booked, regardless of when the trip itself happens.Example: “Show me everything we confirmed in Q1 2026”
Trip Date is best for operational planning (what’s coming up). Booking Date is best for sales performance analysis (when did we win the business).
If your business operates with multiple currencies, analytics will convert all amounts to your default currency using your configured exchange rates. This gives you a unified view across all trips regardless of the currency they were priced in.Exchange rate conversions are snapshotted when you save a service’s price or cost. This means the converted value is locked in at the rate that was active at the time, so your historical financials remain stable even if exchange rates change later.
If exchange rates are not configured in Settings, multi-currency services cannot be converted accurately. The Pricing tab on a trip will attempt a live conversion using current rates, but analytics uses the snapshotted value. Configure your exchange rates in Settings > Financial > Currencies to ensure both views show consistent numbers.
The total selling price charged to clients. This is the amount your clients pay for their trips.
Cost
The total supplier cost for all services. This is what you pay your suppliers.
Gross Margin
Revenue minus Cost. The profit before accounting for agent commission.
Net Margin
Revenue minus Cost minus Commission. Your actual profit after paying travel agent commissions.
Commission
The amount owed to travel agents based on their commission rate and the commissionable portion of the trip.
Collection Rate
The percentage of revenue that has actually been collected through invoice payments. Helps you track outstanding balances.
Conversion
Shown on the Business Overview tab’s Performance lens. Both parts of the formula are anchored to the same date filter — the Journeys created in that period, and how many of those specific Journeys have since become confirmed:(Confirmed from the Journeys created in the period / Journeys created in the period) x 100Example: If your date filter is set to this year (2026), Odia first finds every Journey created in 2026. It then checks how many of those 2026-created Journeys are now Confirmed — regardless of when they were confirmed — and divides that count by the total created in 2026, x 100, to get the conversion rate for 2026.
Do archived Journeys and trips appear in analytics?
No. Archived Journeys and trips are automatically excluded from all analytics tabs. This keeps your metrics focused on your active business.
Where did the 'Include Cancelled' filter go?
It was removed. A single report-wide toggle could not express what teams actually needed — some cancelled services still represent real money, others do not.You now make that call per service, in Journey Financials, when you cancel it: Include in revenue or Exclude from revenue. Every financial report inherits your choice, so the Financial tab, Business Overview, agency performance, and Agencies can no longer disagree with the journey.Old bookmarked links containing cancelled=true still work; the parameter is simply ignored.
What happens when I cancel a service inside a trip?
You choose how it should count. That choice then applies everywhere:
Include in revenue: the service keeps contributing to revenue, cost, margin, sale TA Commission, and cost coverage
Exclude from revenue (also the default when no choice is recorded): it drops out of all of those
Supplier commission and agent splits: unaffected either way — they end only when voided
Operational reporting: the service still counts as cancelled on boards, calendars, and delivery metrics
The trip itself always still appears in analytics.
Can any role see analytics?
It depends on the tab. Business Overview is open to every role — User, Supervisor, Admin, and Owner alike — though only Owner can see whole-team data there; everyone else sees their own. Travelers and Services are also open to every role, if your plan includes them. Agencies, Financial, and Suppliers are Owner-only.
How often is analytics data updated?
Analytics updates in real-time as you work. When you create Journeys, confirm bookings, record payments, or change statuses, the data refreshes automatically.Refresh the page if you’ve just made changes and don’t see them reflected.
Why do my Agencies and Financial numbers look different?
They measure different things and may use different time ranges or filters:
Agencies focuses on commission calculations from confirmed trips
Financial shows the full picture: revenue, cost, margin, commission, and payment collection
The Financial tab also has a Zero-margin Services filter that can change the numbers. Make sure you’re comparing with the same filter and date range. Both tabs honour the same per-service financial treatment, so cancelled services are never a source of disagreement between them.
Why does the Financial tab show different numbers than the Pricing tab on a trip?
If you notice the revenue or cost in the Financial analytics table doesn’t match what you see on a trip’s Pricing tab, check these filters:
Zero-margin Services — If this toggle is off, at-cost services (where selling price = supplier cost) are excluded from the Financial tab. The Pricing tab always shows all services. Turn this toggle on to match.
Snapshot freshness — Journey Financials updates immediately; the Financial tab reads a nightly snapshot. If you just changed a service, wait for the next refresh before comparing.
Cancelled services are not a source of difference: both views apply the same per-service Include/Exclude choice. (The Pricing tab’s own “Include cancelled services” checkbox only controls what is listed on the quote, not what analytics counts.)When the filter and the snapshot date match, the numbers should be identical.
Invoices - Creating invoices and tracking payments
Travel Agents - Managing agent relationships and commissions
Settings - Configuring currencies and exchange rates
Working in the app? Select the ? icon in the bottom-right corner of this screen to open its Help panel, which also has a Contact support button for a live chat with our team.
{"docsConfig":{"$schema":"https://mintlify.com/docs.json","theme":"mint","name":"Odia App","colors":{"primary":"#5D4CFE","light":"#8477FF","dark":"#5D4CFE"},"favicon":"https://mintcdn.com/odia/_zF2hPP6XMmp5V-k/favicon.svg?fit=max\u0026auto=format\u0026n=_zF2hPP6XMmp5V-k\u0026q=85\u0026s=4011abf1975f37ce386a2d62b6c5dab7","logo":{"light":"https://mintcdn.com/odia/_zF2hPP6XMmp5V-k/logo/light.svg?fit=max\u0026auto=format\u0026n=_zF2hPP6XMmp5V-k\u0026q=85\u0026s=e99f3cadea1ec1a2a4c536b41e39a4d5","dark":"https://mintcdn.com/odia/_zF2hPP6XMmp5V-k/logo/dark.svg?fit=max\u0026auto=format\u0026n=_zF2hPP6XMmp5V-k\u0026q=85\u0026s=66b6d60fabe18b60ddb785d56dc5dff0"},"navbar":{"links":[{"label":"Support","href":"mailto:customer@odia.app"}],"primary":{"type":"button","label":"Login","href":"https://odia.app"}},"footer":{"socials":{}},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"odia","hasAudioNarration":false,"actualSubdomain":"odia","customDomains":["help.odia.app"],"gitSource":{"type":"github","owner":"essntlly","repo":"odia-nxt","deployBranch":"main","contentDirectory":"packages/mintlify-docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad1f2cd8e4eb469a4fedb9c","collectionId":"66a7c1db-c9db-487e-9506-7052eecdfad2","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad1f2cd8e4eb469a4fedb9c"},"entitlements":{},"buildId":"6ad1f2cd8e4eb469a4fedb9c","clientVersion":"0.0.3883","searchFilterCounts":[{"language":"default","tag":"Documentation","count":43},{"language":"default","tag":"Features","count":26},{"language":"default","tag":"Onboarding","count":10},{"language":"default","tag":"Journeys","count":8},{"language":"default","tag":"Best practices","count":4},{"language":"default","tag":"Library","count":4},{"language":"default","tag":"Financials","count":3},{"language":"default","tag":"Get Started","count":3},{"language":"default","tag":"Releases","count":2},{"language":"default","tag":"Roadmap","count":2}]},"assistantConfig":{},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-branches-v2-autocommit","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-branches-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"teamspace","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"client-snapshot-docs-config","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"features/analytics","slug":"/features/analytics","pageMetadata":{"title":"Analytics","description":"Track Journey conversions, earnings, financials, traveler patterns, and supplier performance across your business.","icon":"chart-line","href":"/features/analytics"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Track Journey conversions, earnings, financials, traveler patterns, and supplier performance across your business.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,annotation:`annotation`,code:`code`,em:`em`,hr:`hr`,li:`li`,math:`math`,mi:`mi`,mn:`mn`,mo:`mo`,mrow:`mrow`,ol:`ol`,p:`p`,semantics:`semantics`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,Heading,Note,Table,Tip,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`Analytics in Odia gives you a complete picture of your business performance. It is organized into six tabs, each focused on a different aspect of your operations.`})}),`\n`,_jsxs(CardGroup,{cols:3,children:[_jsx(Card,{title:`Business Overview`,icon:`chart-pie`,children:_jsx(_components.p,{children:`How well you turn Journeys into confirmed bookings, plus revenue, cost, and margin`})}),_jsx(Card,{title:`Agencies`,icon:`dollar-sign`,children:_jsx(_components.p,{children:`Revenue earned and commission owed to travel agents`})}),_jsx(Card,{title:`Travelers`,icon:`users`,children:_jsx(_components.p,{children:`Traveler volume, returning guests, and trip patterns`})}),_jsx(Card,{title:`Financial`,icon:`coins`,children:_jsx(_components.p,{children:`Revenue, cost, margin, and payment collection across all trips`})}),_jsx(Card,{title:`Services`,icon:`concierge-bell`,children:_jsx(_components.p,{children:`Which services are used most and how they perform`})}),_jsx(Card,{title:`Suppliers`,icon:`building-user`,children:_jsx(_components.p,{children:`Supplier usage and spending patterns`})})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Access:`}),` Any role can open `,_jsx(_components.strong,{children:`Business Overview`}),`. `,_jsx(_components.strong,{children:`Travelers`}),` and `,_jsx(_components.strong,{children:`Services`}),` also work for any role, if your plan includes them. `,_jsx(_components.strong,{children:`Agencies`}),`, `,_jsx(_components.strong,{children:`Financial`}),`, and `,_jsx(_components.strong,{children:`Suppliers`}),` additionally require the `,_jsx(_components.strong,{children:`Owner`}),` role. Within Business Overview itself, only `,_jsx(_components.strong,{children:`Owner`}),` can view whole-team or per-member data — User, Supervisor, and Admin always see their own performance only.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`what-data-is-included`,children:`What Data Is Included?`}),`\n`,_jsxs(_components.p,{children:[`All analytics tabs automatically exclude `,_jsx(_components.strong,{children:`archived`}),` Journeys and trips. If you archive a Journey, it will no longer appear in any analytics numbers.`]}),`\n`,_jsx(_components.p,{children:`Archived data is filtered out across all tabs consistently, so your metrics always reflect your active business.`}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Archiving is permanent for analytics.`}),` Once you archive a Journey or trip, it disappears from all analytics tabs. Make sure you only archive items you truly want to remove from your reports.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`business-overview-tab`,children:`Business Overview Tab`}),`\n`,_jsxs(_components.p,{children:[`The tab you land on when you open Analytics. It has two lenses — `,_jsx(_components.strong,{children:`Performance`}),` and `,_jsx(_components.strong,{children:`Financial`}),` — switched with a toggle at the top of the tab.`]}),`\n`,_jsx(Heading,{level:`3`,id:`who-sees-what`,children:`Who Sees What`}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Only the `,_jsx(_components.strong,{children:`Owner`}),` role can view whole-team or per-member data here. `,_jsx(_components.strong,{children:`User`}),`, `,_jsx(_components.strong,{children:`Supervisor`}),`, and `,_jsx(_components.strong,{children:`Admin`}),` all see their own performance and financials only — there is no elevated Admin or Supervisor tier on this page.`]})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Role`}),_jsx(_components.th,{children:`What they see`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`User, Supervisor, Admin`}),_jsx(_components.td,{children:`Their own data only. The scope control is replaced with static “My performance” text.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Owner`}),_jsxs(_components.td,{children:[`A scope selector: `,_jsx(_components.strong,{children:`Whole team`}),` (default), a specific team member, or `,_jsx(_components.strong,{children:`Unassigned`})]})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`performance-lens`,children:`Performance Lens`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`North star metrics`}),` (KPI cards, for the selected date range and scope):`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Metric`}),_jsx(_components.th,{children:`What it means`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Journeys created`}),_jsx(_components.td,{children:`Total Journeys created in the period`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Confirmed from these Journeys`}),_jsx(_components.td,{children:`How many of those Journeys became confirmed bookings`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Conversion`}),_jsx(_components.td,{children:`Confirmed ÷ Journeys created`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Average time to confirm`}),_jsx(_components.td,{children:`Average days from creation to confirmation, across Journeys that have confirmed`})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Journeys created chart`}),` — an area chart of Journeys created over time. Toggle between `,_jsx(_components.strong,{children:`Week`}),` and `,_jsx(_components.strong,{children:`Month`}),` grain. A caption below the chart calls out the busiest week or month.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Team performance table`}),` (Owner, Whole team scope only) — the same four metrics broken down one row per team member, plus a highlighted “Whole team” summary row. Sortable by any column.`]}),`\n`,_jsx(Heading,{level:`3`,id:`financial-lens`,children:`Financial Lens`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Monthly Revenue, Cost, and Margin chart`}),` — one combined chart with one point per month, for the currently selected scope, date range, and Financial-lens filters. It plots five series:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Series`}),_jsx(_components.th,{children:`Shown as`}),_jsx(_components.th,{children:`Axis`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Revenue`}),_jsx(_components.td,{children:`Filled area`}),_jsxs(_components.td,{children:[`Left — `,_jsx(_components.strong,{children:`Amount`}),`, in your account currency`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Cost`}),_jsx(_components.td,{children:`Filled area`}),_jsxs(_components.td,{children:[`Left — `,_jsx(_components.strong,{children:`Amount`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Total Earnings`}),_jsx(_components.td,{children:`Line (thicker, with dots)`}),_jsxs(_components.td,{children:[`Left — `,_jsx(_components.strong,{children:`Amount`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Net Margin`}),_jsx(_components.td,{children:`Line`}),_jsxs(_components.td,{children:[`Left — `,_jsx(_components.strong,{children:`Amount`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Margin %`}),_jsx(_components.td,{children:`Dashed line`}),_jsxs(_components.td,{children:[`Right — `,_jsx(_components.strong,{children:`Margin %`})]})]})]})]}),`\n`,_jsx(_components.p,{children:`Margin % gets its own right-hand axis because a percentage and currency amounts don’t share a sensible scale. The left axis shows rounded, compact amounts (e.g. $12.3K); hover over any point to see a tooltip with the exact value for all five series at that month, plus a legend below the chart identifying each series by color. Once a date range spans more than 24 months, the x-axis groups points by quarter instead of by month.`}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`Unlike the Performance lens, the Financial lens has no KPI cards. Totals only appear in the “Whole team” row of the Team financial performance table below.`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Team financial performance table`}),` (Owner, Whole team scope only) — one row per team member, plus an “Unassigned” row and a “Whole team” summary row:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Column`}),_jsx(_components.th,{children:`What it means`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Journeys`}),_jsx(_components.td,{children:`Number of Journeys`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Revenue`}),_jsx(_components.td,{children:`Total customer revenue`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Cost`}),_jsx(_components.td,{children:`Total supplier cost`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Gross margin / Gross margin %`}),_jsx(_components.td,{children:`Revenue minus cost`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`TA Commission`}),_jsx(_components.td,{children:`Commission owed to travel agents`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Net margin / Net margin %`}),_jsx(_components.td,{children:`Gross margin minus TA Commission`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Total Earnings`}),_jsx(_components.td,{children:`Combined earnings figure`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Avg net/Journey`}),_jsx(_components.td,{children:`Net margin divided by Journey count`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Average invoice`}),_jsx(_components.td,{children:`Average invoice value`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Missing costs`}),_jsx(_components.td,{children:`Number of services with a price but no recorded cost`})]})]})]}),`\n`,_jsx(AccordionGroup,{children:_jsxs(Accordion,{title:`How each column is actually calculated`,defaultOpen:false,id:`how-each-column-is-actually-calculated`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Journeys.`}),` Counts every `,_jsx(_components.strong,{children:`Confirmed`}),` Journey in scope.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Revenue.`}),` The total selling price (converted to your base currency) of every active service on those Journeys. Services where the client pays the supplier directly are excluded, since they don’t generate revenue for you.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Cost.`}),` The total supplier cost of that same set of services.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Gross margin / Gross margin %.`}),` Revenue minus Cost. The percentage divides that by Revenue.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`TA Commission.`}),` The commission owed to travel agents on those services — using each service’s own commission rate where one was set, or the Journey’s default rate otherwise — plus any supplier commission that is already netted off cost or still to be collected. Whether commission is calculated on the full selling price or on a net-of-charges basis is a setting on the Journey, not on individual services.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Net margin / Net margin %.`}),` Gross margin minus TA Commission and any already-netted supplier commission. The percentage divides that by Revenue.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Total Earnings.`}),` Net margin plus any supplier commission that is still outstanding to collect.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Avg net/Journey.`}),` Net margin divided by the number of Journeys in that row.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Average invoice.`}),` The average value of invoices `,_jsx(_components.strong,{children:`issued`}),` in the selected date range, based on the invoice’s creation date — not the Journey’s dates or status. Because this is a different population than the Journeys column, it can include Journeys that wouldn’t otherwise count toward Journeys, or exclude Confirmed Journeys that haven’t been invoiced yet. Don’t expect Average invoice to reconcile cleanly against Revenue ÷ Journeys.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Missing costs.`}),` How many Journeys in that row have at least one active service with a known selling price but no recorded cost, so that service’s margin can’t be calculated.`]})]})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Missing costs.`}),` Select a value in the `,_jsx(_components.strong,{children:`Missing costs`}),` column to open a dedicated page listing the services (from the Journeys in scope) that have a known selling price but no recorded cost. Each row names the service and its Journey, so you can open that Journey and add the missing cost.`]}),`\n`,_jsx(Heading,{level:`3`,id:`filters`,children:`Filters`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Date range`}),` — always available; the label switches between “Created date” (Performance) and “Journey date” / “Booking date” (Financial)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Journey Date vs. Booking Date`}),` (Financial lens only) — Journey Date filters by the Journey’s travel dates; `,_jsx(_components.strong,{children:`Booking Date filters by the date the Journey was confirmed`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Include Zero-margin`}),` (Financial lens only, `,_jsx(_components.strong,{children:`on`}),` by default) — controls whether zero-margin (passthrough) services are included in the same columns`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Scope`}),` (Owner only) — Whole team, a specific member, or Unassigned`]}),`\n`]}),`\n`,_jsxs(Note,{children:[_jsx(_components.p,{children:`Zero-margin changes what gets summed into Revenue, Cost, TA Commission, and every other column above — it doesn’t run a separate report, it widens or narrows the same one.`}),_jsxs(_components.p,{children:[`There is `,_jsx(_components.strong,{children:`no cancelled-service filter here`}),`. Whether a cancelled service counts is decided per service in Journey Financials (see `,_jsx(_components.a,{href:`#cancelled-services`,children:`Cancelled Services`}),`), and every column above inherits that decision.`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`exporting`,children:`Exporting`}),`\n`,_jsxs(_components.p,{children:[`Owners viewing `,_jsx(_components.strong,{children:`Whole team`}),` scope can export the Team performance table, the Journeys-created trend, or the Team financial performance table as XLSX or CSV. Exports always include the complete table, not just the currently visible or sorted rows.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`agencies-tab`,children:`Agencies Tab`}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Owner only.`}),` Unlike Business Overview, no other role can open this tab.`]})}),`\n`,_jsxs(_components.p,{children:[`Understand how much revenue your travel agent partners generate and how much commission is owed to them. It has two lenses — `,_jsx(_components.strong,{children:`Agencies`}),` and `,_jsx(_components.strong,{children:`Travel Agents`}),` — switched with a toggle at the top of the tab.`]}),`\n`,_jsx(Heading,{level:`3`,id:`agencies-lens`,children:`Agencies Lens`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`North star metrics`}),` (KPI cards):`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Metric`}),_jsx(_components.th,{children:`What it means`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Total Revenue`}),_jsx(_components.td,{children:`Total revenue across agency-linked Journeys in the period`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Total TA Commission`}),_jsx(_components.td,{children:`Total commission owed across those Journeys`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Active Agencies`}),_jsx(_components.td,{children:`Number of agencies with activity in the period`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Top revenue`}),_jsx(_components.td,{children:`The single agency with the highest revenue`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Highest converter`}),_jsx(_components.td,{children:`The agency with the best conversion rate, among agencies with at least 5 Journeys`})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Monthly trend chart`}),` — revenue and TA Commission plotted by month, same style as the Business Overview financial chart.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Performance ranking chart`}),` — a bar chart of the top 20 agencies. Two buttons let you switch what it ranks by: `,_jsx(_components.strong,{children:`Revenue`}),` or `,_jsx(_components.strong,{children:`Conversion`}),`. In Conversion mode, it only ranks agencies that have a conversion rate at all (any volume, not just the 5+ Journey minimum used for the “Highest converter” KPI card).`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Agency performance table`}),` — one row per agency: Agency, Parent Agency, Journeys, Confirmed Journeys, Conversion %, Travel Agents (count), Revenue, TA Commission. Searchable, sortable, and rows can be selected — export either your selection or the full filtered table.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Filters:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Period`}),` — This Year, a prior year, All Time, or a custom date range`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Date mode`}),` — Journey Date or Created Date`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Agency`}),` — a searchable dropdown to focus on one agency`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`travel-agents-lens`,children:`Travel Agents Lens`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`North star metrics`}),` (KPI cards):`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Metric`}),_jsx(_components.th,{children:`What it means`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Total Revenue`}),_jsx(_components.td,{children:`Total revenue across this agent’s Journeys in the period`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Total TA Commission`}),_jsx(_components.td,{children:`Earned plus projected commission combined`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Active Travel Agents`}),_jsx(_components.td,{children:`Number of individual agents with activity in the period`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Top revenue`}),_jsx(_components.td,{children:`The single travel agent with the highest revenue`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Highest converter`}),_jsx(_components.td,{children:`The agent with the best conversion rate, among agents with at least 5 proposals`})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Monthly trend chart`}),`, with an optional projections chart alongside it.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Performance ranking chart`}),` — the same Revenue/Conversion bar chart as the Agencies lens, scoped to individual travel agents (labeled by Proposal rather than Journey for conversion).`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Travel agent reporting table`}),` — one row per travel agent: Travel Agent, Agency, Proposal conversion, Revenue, Total TA Commission, Avg TA Commission Rate, Journeys. Scrolls to load more rows, and is exportable.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Filters:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Period`}),` — same options as the Agencies lens`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Date mode`}),` — Journey Date (travel dates) or Booking Date (`,_jsx(_components.strong,{children:`the date the Journey was confirmed`}),`)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Travel agent`}),` — a searchable dropdown to focus on one agent`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`how-cancellations-are-handled-here`,children:`How Cancellations Are Handled Here`}),`\n`,_jsxs(_components.p,{children:[`There’s no toggle on this tab. Revenue and sale TA Commission follow the Include/Exclude choice recorded on each cancelled service in Journey Financials — a cancelled service with no choice recorded is excluded. See `,_jsx(_components.a,{href:`#cancelled-services`,children:`Cancelled Services`}),` in the Financial tab below for the full explanation.`]}),`\n`,_jsx(_components.p,{children:`Supplier commission and agent splits are the exception: they are obligations, not sales, so they keep counting toward Total TA Commission even when the service is cancelled and excluded from revenue. They stop only when someone voids the commission.`}),`\n`,_jsx(Heading,{level:`3`,id:`exporting-2`,children:`Exporting`}),`\n`,_jsx(_components.p,{children:`Both lenses can export their table and their ranking chart to XLSX. Table exports respect your current selection and search/sort filtering.`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`travelers-tab`,children:`Travelers Tab`}),`\n`,_jsx(_components.p,{children:`See patterns in your traveler base: volume, spending, and returning guests.`}),`\n`,_jsx(Heading,{level:`3`,id:`who-sees-what-2`,children:`Who Sees What`}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`This tab is not Owner-only, but non-owners always see their own bookings’ travelers — they can’t switch scope.`})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Role`}),_jsx(_components.th,{children:`What they see`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Non-owner`}),_jsx(_components.td,{children:`Their own travelers only, regardless of anything in the URL`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Owner`}),_jsx(_components.td,{children:`Company-wide by default, or a specific team member`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`north-star-metrics`,children:`North Star Metrics`}),`\n`,_jsx(_components.p,{children:`KPI cards, for the selected period and scope:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Metric`}),_jsx(_components.th,{children:`What it means`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Total Travelers`}),_jsx(_components.td,{children:`Distinct travelers in the period — see “What counts as a traveler” below`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Total Journeys`}),_jsx(_components.td,{children:`Total Journeys in the period`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Total Spending`}),_jsx(_components.td,{children:`Total revenue across those Journeys`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Avg Journey Value`}),_jsx(_components.td,{children:`Total Spending ÷ Total Journeys`})]})]})]}),`\n`,_jsx(_components.p,{children:`Each card shows a trend vs. an equal-length immediately preceding period (e.g. this month vs. last month) — not shown when viewing All Time, since there’s no equivalent prior period to compare against.`}),`\n`,_jsx(Heading,{level:`3`,id:`charts`,children:`Charts`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Travelers and Journey value by month`}),` — a monthly chart combining Spending (area) and Journeys (bar). Unlike the Business Overview charts, there’s no week/month grain toggle here — it’s always monthly.`]}),`\n`,_jsxs(_components.p,{children:[`Below that, a `,_jsx(_components.strong,{children:`Traveler Insights`}),` section with three more charts:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`A switchable `,_jsx(_components.strong,{children:`Group size`}),` / `,_jsx(_components.strong,{children:`Spend-per-person`}),` chart`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Journeys by month`}),` — a bar chart of Journey counts`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`New vs returning travelers`}),` — bars for new and repeat traveler counts, plus a repeat-rate percentage line`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`top-returning-travelers`,children:`Top Returning Travelers`}),`\n`,_jsxs(_components.p,{children:[`A leaderboard of your top 5 repeat `,_jsx(_components.strong,{children:`primary`}),` travelers: anyone who was the primary contact on `,_jsx(_components.strong,{children:`2 or more Journeys`}),` in the period, ranked by Journey count. Each row shows their rank, name, organization (if set), Journey count, and total spending. A co-traveler who was never the primary contact on a Journey won’t show up here, even if they’ve travelled many times.`]}),`\n`,_jsx(Heading,{level:`3`,id:`top-primary-travelers-table`,children:`Top Primary Travelers Table`}),`\n`,_jsxs(_components.p,{children:[`The full table, one row per `,_jsx(_components.strong,{children:`primary`}),` traveler: name, email, organization, total/completed/upcoming Journeys, total spending, average Journey value, last Journey date, and destinations. This is the only part of the tab that can be exported (XLSX).`]}),`\n`,_jsx(Heading,{level:`3`,id:`what-counts-as-a-traveler-or-a-journey`,children:`What Counts As A Traveler Or A Journey`}),`\n`,_jsxs(AccordionGroup,{children:[_jsxs(Accordion,{title:`What counts as a \"traveler\"`,defaultOpen:false,id:`what-counts-as-a-traveler`,children:[_jsx(_components.p,{children:`It depends which part of the tab you’re looking at:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Total Travelers`}),` (KPI card) and the `,_jsx(_components.strong,{children:`New vs returning travelers`}),` chart count `,_jsx(_components.strong,{children:`every distinct person`}),` on a Journey — co-travelers included, not just the primary contact.`]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.strong,{children:`Top Returning Travelers`}),` leaderboard and the `,_jsx(_components.strong,{children:`Top Primary Travelers`}),` table only count the Journey’s `,_jsx(_components.strong,{children:`primary traveler`}),` — its client contact. This is deliberate: these two views rank people by revenue, and crediting a Journey’s spending to every co-traveler would multiply the same revenue across several people. A co-traveler who is never a Journey’s primary contact won’t appear in either.`]}),`\n`]})]}),_jsx(Accordion,{title:`What counts as a \"Journey\" here`,defaultOpen:false,id:`what-counts-as-a-journey-here`,children:_jsxs(_components.p,{children:[`Only `,_jsx(_components.strong,{children:`Confirmed`}),` or `,_jsx(_components.strong,{children:`Accepted`}),` Journeys that aren’t archived. This isn’t a filter you can change on this tab — Journeys in other statuses never appear in Travelers numbers.`]})}),_jsxs(Accordion,{title:`How \"New\" vs \"Returning\" is decided`,defaultOpen:false,id:`how-new-vs-returning-is-decided`,children:[_jsxs(_components.p,{children:[`A traveler counts as `,_jsx(_components.strong,{children:`New`}),` in the month of their very first Journey in your `,_jsx(_components.strong,{children:`entire`}),` Odia history — not just their first appearance within whatever period you’ve currently selected.`]}),_jsx(_components.p,{children:`This means: if you filter to last month and see “3 new travelers,” that’s genuinely their first-ever Journey with you. It also means a traveler can never show as “New” twice, and if their real first trip was before your selected range, they’ll always show as “Returning” even if it’s the only Journey visible in your current filter.`})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`filters-2`,children:`Filters`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Period`}),` — This Year, Last Year, a specific year, All Time, or a custom range`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Team member`}),` (Owner only) — narrow to one person’s travelers instead of the whole company`]}),`\n`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`There’s no trip-date/booking-date toggle here, unlike Agencies and Financial. Every chart and table on this tab is filtered by the Journey’s `,_jsx(_components.strong,{children:`travel start date`}),` — when does the traveler go, not when did you confirm the deal.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`financial-tab`,children:`Financial Tab`}),`\n`,_jsx(_components.p,{children:`The most detailed financial view. Shows revenue, cost, margin, commission, and payment collection for every trip.`}),`\n`,_jsxs(AccordionGroup,{children:[_jsxs(Accordion,{title:`KPI Cards`,defaultOpen:true,id:`kpi-cards`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Metric`}),_jsx(_components.th,{children:`What It Tells You`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Revenue`}),_jsx(_components.td,{children:`Total selling price across all trips`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Cost`}),_jsx(_components.td,{children:`Total supplier cost`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Net Margin`}),_jsx(_components.td,{children:`Revenue minus cost minus commission, the actual profit`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Invoiced`}),_jsx(_components.td,{children:`Total amount from non-cancelled invoices sent to clients`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Commission`}),_jsx(_components.td,{children:`Total commission owed to travel agents`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Collection Rate`}),_jsx(_components.td,{children:`How much of the revenue has been paid by clients`})]})]})]}),_jsxs(_components.p,{children:[`Each KPI also shows a `,_jsx(_components.strong,{children:`trend indicator`}),` in the top-right corner — a green arrow (up) or red arrow (down) with a percentage. This is the change vs. the equivalent previous period of the same length: if you’re viewing Jan–Dec 2025, it compares against Jan–Dec 2024; if you pick a custom 3-month range, it compares against the 3 months immediately before it. The indicator is hidden when the change is less than 0.1% (too small to be meaningful) and is not shown when viewing All Time (no comparable previous period).`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Collection Rate`}),` is calculated as total payments logged ÷ total revenue. It is based entirely on payments that are `,_jsx(_components.strong,{children:`manually recorded`}),` against invoices — there is no automatic payment detection. If no payments have been logged for a trip, its collection rate is 0% regardless of what was actually paid. To keep this accurate, log payments on each invoice as they come in.`]})]}),_jsxs(Accordion,{title:`How Collection Rate Works`,defaultOpen:false,id:`how-collection-rate-works`,children:[_jsxs(_components.p,{children:[`Collection rate = `,_jsx(_components.strong,{children:`total collected ÷ total revenue`}),`.`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Total collected`}),` is the sum of all payment entries recorded on non-cancelled invoices for the selected trips.`]}),`\n`,_jsxs(_components.li,{children:[`Payments are `,_jsx(_components.strong,{children:`manually logged`}),` — a user must open an invoice and record each payment (amount, date, and optional notes).`]}),`\n`,_jsx(_components.li,{children:`There is no integration with payment processors; nothing is tracked automatically.`}),`\n`,_jsx(_components.li,{children:`Cancelled invoices and their payments are excluded from the calculation.`}),`\n`]}),_jsx(_components.p,{children:`If you have received money but haven’t logged it against an invoice, the collection rate will underreport your actual collections.`})]}),_jsxs(Accordion,{title:`Confirmed Journey Financial Table`,defaultOpen:false,id:`confirmed-journey-financial-table`,children:[_jsx(_components.p,{children:`A detailed table listing every trip with:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Revenue, cost, and margin per trip`}),`\n`,_jsx(_components.li,{children:`Commission amount`}),`\n`,_jsx(_components.li,{children:`Amount collected vs. outstanding`}),`\n`,_jsx(_components.li,{children:`Cost data coverage indicator (full, partial, or none)`}),`\n`]}),_jsxs(_components.p,{children:[`You can `,_jsx(_components.strong,{children:`search`}),` by trip name, `,_jsx(_components.strong,{children:`sort`}),` by any column, and `,_jsx(_components.strong,{children:`export to Excel`}),`.`]})]}),_jsxs(Accordion,{title:`Financial Trends Chart`,defaultOpen:false,id:`financial-trends-chart`,children:[_jsx(_components.p,{children:`Monthly chart showing:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Revenue and cost as area charts`}),`\n`,_jsx(_components.li,{children:`Net margin as a line`}),`\n`,_jsx(_components.li,{children:`Margin percentage as a secondary axis`}),`\n`]}),_jsx(_components.p,{children:`Helps you spot months with high revenue but low margin, or identify cost trends.`})]}),_jsx(Accordion,{title:`Filters`,defaultOpen:false,id:`filters`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Period selector`}),` - This year, last year, all time, specific year, or custom date range`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Trip Date vs. Booking Date`}),` - Choose whether to filter by when the trip takes place or `,_jsx(_components.strong,{children:`by the date the Journey was confirmed`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Zero-margin Services`}),` - Toggle to exclude services sold at cost with no markup (see below)`]}),`\n`]})})]}),`\n`,_jsx(Heading,{level:`3`,id:`cancelled-services`,children:`Cancelled Services`}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`There is no Analytics-wide cancelled-service filter. You decide per service, once, in Journey Financials — and every financial report follows that decision.`})}),`\n`,_jsxs(_components.p,{children:[`When you cancel a service you choose how it should be treated financially: `,_jsx(_components.strong,{children:`Include in revenue`}),` or `,_jsx(_components.strong,{children:`Exclude from revenue`}),`. A cancelled service with no choice recorded is `,_jsx(_components.strong,{children:`excluded`}),`, which matches the previous default.`]}),`\n`,_jsx(_components.p,{children:`That single per-service choice is inherited by the Financial tab, the Business Overview Financial lens, the Agencies tab’s revenue and sale TA Commission, agency performance, and any export derived from them. Zero-margin remains the only service-level financial filter left in Analytics.`}),`\n`,_jsxs(AccordionGroup,{children:[_jsxs(Accordion,{title:`How each surface treats cancellations`,defaultOpen:true,id:`how-each-surface-treats-cancellations`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Surface`}),_jsx(_components.th,{children:`How it handles cancellations`}),_jsx(_components.th,{children:`Why`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Financial`})}),_jsx(_components.td,{children:`Follows each service’s Include/Exclude choice`}),_jsx(_components.td,{children:`The choice belongs to the service, not to the report`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Business Overview → Financial`})}),_jsx(_components.td,{children:`Same choice, same figures`}),_jsx(_components.td,{children:`It reads the same source as the Financial tab`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Agencies`})}),_jsx(_components.td,{children:`Revenue and sale commission follow the same choice`}),_jsx(_components.td,{children:`Agencies must reconcile with Journey Financials`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Supplier commission \u0026 agent splits`})}),_jsx(_components.td,{children:`Kept until explicitly voided`}),_jsx(_components.td,{children:`A cancelled booking can still owe you commission`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Business Overview → Performance`})}),_jsx(_components.td,{children:`Counts “cancelled” as a lost Journey`}),_jsx(_components.td,{children:`It’s about Journey outcomes, not individual services`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Travelers`})}),_jsx(_components.td,{children:`Always excludes cancelled`}),_jsx(_components.td,{children:`Only counts actual trips taken`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Service delivery metrics`})}),_jsx(_components.td,{children:`Always status-based`}),_jsx(_components.td,{children:`Operational reporting, not money`})]})]})]}),_jsx(_components.p,{children:`Operational counts stay status-based everywhere: a cancelled service is still counted as cancelled on boards, calendars, and delivery metrics regardless of how it is treated on the books.`})]}),_jsxs(Accordion,{title:`Example`,defaultOpen:false,id:`example`,children:[_jsx(_components.p,{children:`A journey has four services:`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Service`}),_jsx(_components.th,{children:`Status`}),_jsx(_components.th,{children:`Financial treatment`}),_jsx(_components.th,{children:`Counts toward revenue?`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Hotel — $6,000`}),_jsx(_components.td,{children:`Active`}),_jsx(_components.td,{children:`n/a`}),_jsx(_components.td,{children:`Yes`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Transfer — $2,000`}),_jsx(_components.td,{children:`Cancelled`}),_jsx(_components.td,{children:`Include in revenue`}),_jsx(_components.td,{children:`Yes`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Tour — $1,500`}),_jsx(_components.td,{children:`Cancelled`}),_jsx(_components.td,{children:`Exclude from revenue`}),_jsx(_components.td,{children:`No`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Dinner — $500`}),_jsx(_components.td,{children:`Cancelled`}),_jsx(_components.td,{children:`Not set`}),_jsx(_components.td,{children:`No`})]})]})]}),_jsxs(_components.p,{children:[`On-book revenue is `,_jsx(_components.strong,{children:`$8,000`}),` — the active hotel plus the cancelled transfer you chose to keep. Cost, margin, sale TA Commission, and cost coverage use the same two services.`]}),_jsxs(_components.p,{children:[`The journey still shows `,_jsx(_components.strong,{children:`three cancelled services`}),` in operational reporting. And if the cancelled tour had a supplier commission you are still owed, that commission keeps appearing in supplier totals until someone voids it.`]})]}),_jsx(Accordion,{title:`Why did Analytics not update immediately?`,defaultOpen:false,id:`why-did-analytics-not-update-immediately`,children:_jsx(_components.p,{children:`Journey Financials recalculates the moment you change a service’s treatment. The Analytics tabs, agency performance, and Agencies figures read a nightly snapshot, so they show the new figure after the next refresh. This is expected — the two are not disagreeing, one is simply newer.`})})]}),`\n`,_jsx(Heading,{level:`3`,id:`zero-margin-services-filter`,children:`Zero-Margin Services Filter`}),`\n`,_jsxs(_components.p,{children:[`Some services are passed through to the client at cost, with no markup (e.g., administrative fees, transfers billed at the exact supplier price). These are called `,_jsx(_components.strong,{children:`zero-margin services`}),` because their selling price equals the supplier cost.`]}),`\n`,_jsxs(_components.p,{children:[`By default, zero-margin services are `,_jsx(_components.strong,{children:`included`}),` in all financial calculations. This means your revenue, cost, and totals match exactly what you see on each trip’s Pricing tab.`]}),`\n`,_jsxs(_components.p,{children:[`Turn `,_jsx(_components.strong,{children:`off`}),` the “Zero-margin Services” toggle to exclude them. This is useful when you want to:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Focus on margin-generating business`}),` — see only services where you earn a markup`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Analyze true profitability`}),` — understand your margins without at-cost services diluting the percentages`]}),`\n`]}),`\n`,_jsxs(AccordionGroup,{children:[_jsxs(Accordion,{title:`How does this affect the numbers?`,defaultOpen:true,id:`how-does-this-affect-the-numbers`,children:[_jsx(_components.p,{children:`When you exclude zero-margin services:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Revenue drops`}),` — the selling price of at-cost services is removed`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Cost drops`}),` — the supplier cost of those same services is removed`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Net margin stays the same`}),` — because these services had zero margin, removing them doesn’t change your actual profit`]}),`\n`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{}),_jsx(_components.th,{children:`Zero-margin ON (default)`}),_jsx(_components.th,{children:`Zero-margin OFF`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Revenue`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`$100,000`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`$85,000`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Cost`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`$78,000`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`$63,000`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Net Margin`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`$22,000`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`$22,000`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Margin %`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`22%`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`25.9%`})]})]})]}),_jsx(_components.p,{children:`Notice the margin percentage increases when at-cost services are excluded, because you’re measuring against a smaller revenue base.`})]}),_jsxs(Accordion,{title:`Why do the numbers match my Pricing tab when this is ON?`,defaultOpen:false,id:`why-do-the-numbers-match-my-pricing-tab-when-this-is-on`,children:[_jsxs(_components.p,{children:[`The Pricing tab on each trip always shows `,_jsx(_components.strong,{children:`all services`}),` — it doesn’t have a zero-margin filter. When the Financial tab has “Zero-margin Services” turned on (the default), both views include the same services, so the revenue and cost will match.`]}),_jsx(_components.p,{children:`If you turn zero-margin services off in analytics, the Financial tab will show lower revenue and cost than the Pricing tab. This is expected — the analytics is filtering out at-cost services while the Pricing tab always shows everything.`})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`understanding-invoiced-vs-revenue`,children:`Understanding Invoiced vs. Revenue`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Invoiced`}),`, `,_jsx(_components.strong,{children:`Collected`}),`, and `,_jsx(_components.strong,{children:`Outstanding`}),` metrics reflect actual invoice documents and payments — they are `,_jsx(_components.strong,{children:`not affected`}),` by a service’s financial treatment or by the Zero-margin filter.`]}),`\n`,_jsx(_components.p,{children:`This means:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Changing a cancelled service to Include or Exclude changes Revenue, Cost, and Margin but `,_jsx(_components.strong,{children:`not`}),` Invoiced or Collected`]}),`\n`,_jsx(_components.li,{children:`Invoiced may be higher than Revenue if services were cancelled and excluded after invoices were sent`}),`\n`,_jsx(_components.li,{children:`Invoiced may be lower than Revenue if not all services have been invoiced yet`}),`\n`]}),`\n`,_jsxs(Accordion,{title:`Example`,defaultOpen:false,id:`example-1`,children:[_jsxs(_components.p,{children:[`A trip has `,_jsxs(_components.span,{className:`katex`,children:[_jsx(_components.span,{className:`katex-mathml`,children:_jsx(_components.math,{xmlns:`http://www.w3.org/1998/Math/MathML`,children:_jsxs(_components.semantics,{children:[_jsxs(_components.mrow,{children:[_jsx(_components.mn,{children:`10`}),_jsx(_components.mo,{separator:`true`,children:`,`}),_jsx(_components.mn,{children:`000`}),_jsx(_components.mi,{children:`i`}),_jsx(_components.mi,{children:`n`}),_jsx(_components.mi,{children:`s`}),_jsx(_components.mi,{children:`e`}),_jsx(_components.mi,{children:`r`}),_jsx(_components.mi,{children:`v`}),_jsx(_components.mi,{children:`i`}),_jsx(_components.mi,{children:`c`}),_jsx(_components.mi,{children:`e`}),_jsx(_components.mi,{children:`s`}),_jsx(_components.mi,{children:`a`}),_jsx(_components.mi,{children:`n`}),_jsx(_components.mi,{children:`d`}),_jsx(_components.mi,{children:`o`}),_jsx(_components.mi,{children:`n`}),_jsx(_components.mi,{children:`e`})]}),_jsx(_components.annotation,{encoding:`application/x-tex`,children:`10,000 in services and one `})]})})}),_jsx(_components.span,{className:`katex-html`,\"aria-hidden\":`true`,children:_jsxs(_components.span,{className:`base`,children:[_jsx(_components.span,{className:`strut`,style:{height:`0.8889em`,verticalAlign:`-0.1944em`}}),_jsx(_components.span,{className:`mord`,children:`10`}),_jsx(_components.span,{className:`mpunct`,children:`,`}),_jsx(_components.span,{className:`mspace`,style:{marginRight:`0.1667em`}}),_jsx(_components.span,{className:`mord`,children:`000`}),_jsx(_components.span,{className:`mord mathnormal`,children:`in`}),_jsx(_components.span,{className:`mord mathnormal`,style:{marginRight:`0.0278em`},children:`ser`}),_jsx(_components.span,{className:`mord mathnormal`,style:{marginRight:`0.0359em`},children:`v`}),_jsx(_components.span,{className:`mord mathnormal`,children:`i`}),_jsx(_components.span,{className:`mord mathnormal`,children:`ces`}),_jsx(_components.span,{className:`mord mathnormal`,children:`an`}),_jsx(_components.span,{className:`mord mathnormal`,children:`d`}),_jsx(_components.span,{className:`mord mathnormal`,children:`o`}),_jsx(_components.span,{className:`mord mathnormal`,children:`n`}),_jsx(_components.span,{className:`mord mathnormal`,children:`e`})]})})]}),`2,000 service was cancelled after being invoiced.`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Metric`}),_jsx(_components.th,{children:`Cancelled service excluded`}),_jsx(_components.th,{children:`Cancelled service included`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Revenue`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`$8,000`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`$10,000`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Invoiced`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`$10,000`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`$10,000`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Outstanding`}),_jsx(_components.td,{children:`$10,000 - collected`}),_jsx(_components.td,{children:`$10,000 - collected`})]})]})]}),_jsx(_components.p,{children:`Invoiced stays at $10,000 in both cases because the invoice document was already sent. If the money is genuinely not owed, credit or cancel the invoice — changing the service’s financial treatment does not alter invoice documents.`})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`services-tab`,children:`Services Tab`}),`\n`,_jsx(_components.p,{children:`Understand which Library services get scheduled most, and how each one performs financially. Unlike the other tabs, there’s no chart here — just one table.`}),`\n`,_jsx(Heading,{level:`3`,id:`who-sees-what-3`,children:`Who Sees What`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Role`}),_jsx(_components.th,{children:`What they see`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Non-owner`}),_jsx(_components.td,{children:`Their own services only`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Owner`}),_jsx(_components.td,{children:`Company-wide by default, or a specific team member`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`the-table`,children:`The Table`}),`\n`,_jsxs(_components.p,{children:[`One row per unique Library service — not per booking, not per category. The heading above the table reads “`,_jsx(_components.strong,{children:`N`}),` unique services,” with a tooltip clarifying: `,_jsx(_components.em,{children:`“Each Service is counted once, even when it is scheduled on many Journeys.”`})]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Column`}),_jsx(_components.th,{children:`What it means`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Service`}),_jsx(_components.td,{children:`Title, plus a note if it’s a variant of another service, and its category`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Journeys with this service`}),_jsx(_components.td,{children:`Number of distinct Journeys that include it (one Journey can include the same service more than once, but this only counts distinct Journeys)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Revenue`}),_jsx(_components.td,{children:`Total selling price this service has generated`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Cost`}),_jsx(_components.td,{children:`Total supplier cost for this service`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Attributable earnings (+ %)`}),_jsx(_components.td,{children:`This service’s share of earnings`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Cost coverage %`}),_jsx(_components.td,{children:`How much of this service’s occurrences have a recorded cost`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Avg. guests`}),_jsx(_components.td,{children:`Average number of guests per occurrence`})]})]})]}),`\n`,_jsx(_components.p,{children:`Sorted by Journeys with this service (descending) by default, 12 rows per page.`}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`A service only counts toward Journeys, Revenue, and Cost here once its Journey is genuinely `,_jsx(_components.strong,{children:`Confirmed`}),` (has a confirmation date) — an Accepted-but-not-yet-Confirmed Journey doesn’t count yet, which is narrower than some other tabs. A cancelled or client-direct occurrence of the service is also excluded.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`filters-3`,children:`Filters`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Service date`}),` — the same period selector used elsewhere (This Year, Last Year, custom range, etc.)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Category`}),` — a single-select dropdown to narrow to one category`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Team member`}),` (Owner only)`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`There’s no area/destination, supplier, or free-text search filter on this tab.`}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Category matching is by `,_jsx(_components.strong,{children:`name and parent category`}),`, not by a fixed internal ID — this handles a tenant having its own category row that duplicates a global one. One side effect: if you rename a category so its name and parent match a different category, their Services tab counts will merge under that filter.`]})}),`\n`,_jsx(_components.p,{children:`There’s currently no export on this tab.`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`suppliers-tab`,children:`Suppliers Tab`}),`\n`,_jsx(_components.p,{children:`Track which suppliers you work with most and how spending is distributed.`}),`\n`,_jsx(AccordionGroup,{children:_jsx(Accordion,{title:`What It Shows`,defaultOpen:true,id:`what-it-shows`,children:_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Most used suppliers`}),`\n`,_jsx(_components.li,{children:`Spending per supplier`}),`\n`,_jsx(_components.li,{children:`Supplier category breakdown`}),`\n`]})})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`date-modes-trip-date-vs-booking-date`,children:`Date Modes: Trip Date vs. Booking Date`}),`\n`,_jsx(_components.p,{children:`Several tabs offer a choice between two date modes:`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsxs(Card,{title:`Trip Date`,icon:`plane-departure`,children:[_jsxs(_components.p,{children:[`Filter by `,_jsx(_components.strong,{children:`when the trip takes place`}),`. Use this to see what’s happening in a specific travel season.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Example:`}),` “Show me all trips happening in July 2026”`]})]}),_jsxs(Card,{title:`Booking Date`,icon:`calendar-check`,children:[_jsxs(_components.p,{children:[`Filter by `,_jsx(_components.strong,{children:`the date the Journey was confirmed`}),` — the day its status changed to Confirmed. Use this to see when revenue was actually booked, regardless of when the trip itself happens.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Example:`}),` “Show me everything we confirmed in Q1 2026”`]})]})]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Trip Date`}),` is best for operational planning (what’s coming up). `,_jsx(_components.strong,{children:`Booking Date`}),` is best for sales performance analysis (when did we win the business).`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`period-selector`,children:`Period Selector`}),`\n`,_jsx(_components.p,{children:`All tabs with date filtering share the same period selector:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Option`}),_jsx(_components.th,{children:`What It Shows`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`This Year`}),_jsx(_components.td,{children:`January 1 to December 31 of the current year`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Last Year`}),_jsx(_components.td,{children:`Full previous calendar year`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Specific Year`}),_jsx(_components.td,{children:`Any year with data (e.g., 2024, 2025)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Custom Range`}),_jsx(_components.td,{children:`Pick your own start and end dates`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`All Time`}),_jsx(_components.td,{children:`Everything since you started using Odia`})]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`multi-currency-support`,children:`Multi-Currency Support`}),`\n`,_jsxs(_components.p,{children:[`If your business operates with multiple currencies, analytics will convert all amounts to your `,_jsx(_components.strong,{children:`default currency`}),` using your configured exchange rates. This gives you a unified view across all trips regardless of the currency they were priced in.`]}),`\n`,_jsxs(_components.p,{children:[`Exchange rate conversions are `,_jsx(_components.strong,{children:`snapshotted`}),` when you save a service’s price or cost. This means the converted value is locked in at the rate that was active at the time, so your historical financials remain stable even if exchange rates change later.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`If exchange rates are not configured in Settings, multi-currency services cannot be converted accurately. The Pricing tab on a trip will attempt a live conversion using current rates, but analytics uses the snapshotted value. Configure your exchange rates in `,_jsx(_components.strong,{children:`Settings > Financial > Currencies`}),` to ensure both views show consistent numbers.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`key-metrics-glossary`,children:`Key Metrics Glossary`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Revenue`,defaultOpen:false,id:`revenue`,children:_jsxs(_components.p,{children:[`The total `,_jsx(_components.strong,{children:`selling price`}),` charged to clients. This is the amount your clients pay for their trips.`]})}),_jsx(Accordion,{title:`Cost`,defaultOpen:false,id:`cost`,children:_jsxs(_components.p,{children:[`The total `,_jsx(_components.strong,{children:`supplier cost`}),` for all services. This is what you pay your suppliers.`]})}),_jsx(Accordion,{title:`Gross Margin`,defaultOpen:false,id:`gross-margin`,children:_jsx(_components.p,{children:`Revenue minus Cost. The profit before accounting for agent commission.`})}),_jsx(Accordion,{title:`Net Margin`,defaultOpen:false,id:`net-margin`,children:_jsx(_components.p,{children:`Revenue minus Cost minus Commission. Your actual profit after paying travel agent commissions.`})}),_jsx(Accordion,{title:`Commission`,defaultOpen:false,id:`commission`,children:_jsx(_components.p,{children:`The amount owed to travel agents based on their commission rate and the commissionable portion of the trip.`})}),_jsx(Accordion,{title:`Collection Rate`,defaultOpen:false,id:`collection-rate`,children:_jsx(_components.p,{children:`The percentage of revenue that has actually been collected through invoice payments. Helps you track outstanding balances.`})}),_jsxs(Accordion,{title:`Conversion`,defaultOpen:false,id:`conversion`,children:[_jsxs(_components.p,{children:[`Shown on the Business Overview tab’s Performance lens. Both parts of the formula are anchored to the `,_jsx(_components.strong,{children:`same`}),` date filter — the Journeys `,_jsx(_components.strong,{children:`created`}),` in that period, and how many of those specific Journeys have since become `,_jsx(_components.strong,{children:`confirmed`}),`:`]}),_jsx(_components.p,{children:`(Confirmed from the Journeys created in the period / Journeys created in the period) x 100`}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Example:`}),` If your date filter is set to this year (2026), Odia first finds every Journey `,_jsx(_components.strong,{children:`created`}),` in 2026. It then checks how many of those 2026-created Journeys are now `,_jsx(_components.strong,{children:`Confirmed`}),` — regardless of when they were confirmed — and divides that count by the total created in 2026, x 100, to get the conversion rate for 2026.`]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`common-questions`,children:`Common Questions`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Do archived Journeys and trips appear in analytics?`,defaultOpen:false,id:`do-archived-journeys-and-trips-appear-in-analytics`,children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`No.`}),` Archived Journeys and trips are automatically excluded from all analytics tabs. This keeps your metrics focused on your active business.`]})}),_jsxs(Accordion,{title:`Where did the 'Include Cancelled' filter go?`,defaultOpen:false,id:`where-did-the-include-cancelled-filter-go`,children:[_jsx(_components.p,{children:`It was removed. A single report-wide toggle could not express what teams actually needed — some cancelled services still represent real money, others do not.`}),_jsxs(_components.p,{children:[`You now make that call per service, in Journey Financials, when you cancel it: `,_jsx(_components.strong,{children:`Include in revenue`}),` or `,_jsx(_components.strong,{children:`Exclude from revenue`}),`. Every financial report inherits your choice, so the Financial tab, Business Overview, agency performance, and Agencies can no longer disagree with the journey.`]}),_jsxs(_components.p,{children:[`Old bookmarked links containing `,_jsx(_components.code,{children:`cancelled=true`}),` still work; the parameter is simply ignored.`]})]}),_jsxs(Accordion,{title:`What happens when I cancel a service inside a trip?`,defaultOpen:false,id:`what-happens-when-i-cancel-a-service-inside-a-trip`,children:[_jsx(_components.p,{children:`You choose how it should count. That choice then applies everywhere:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Include in revenue:`}),` the service keeps contributing to revenue, cost, margin, sale TA Commission, and cost coverage`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Exclude from revenue`}),` (also the default when no choice is recorded): it drops out of all of those`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Supplier commission and agent splits:`}),` unaffected either way — they end only when voided`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Operational reporting:`}),` the service still counts as cancelled on boards, calendars, and delivery metrics`]}),`\n`]}),_jsx(_components.p,{children:`The trip itself always still appears in analytics.`})]}),_jsx(Accordion,{title:`Can any role see analytics?`,defaultOpen:false,id:`can-any-role-see-analytics`,children:_jsxs(_components.p,{children:[`It depends on the tab. `,_jsx(_components.strong,{children:`Business Overview`}),` is open to every role — User, Supervisor, Admin, and Owner alike — though only Owner can see whole-team data there; everyone else sees their own. `,_jsx(_components.strong,{children:`Travelers`}),` and `,_jsx(_components.strong,{children:`Services`}),` are also open to every role, if your plan includes them. `,_jsx(_components.strong,{children:`Agencies`}),`, `,_jsx(_components.strong,{children:`Financial`}),`, and `,_jsx(_components.strong,{children:`Suppliers`}),` are Owner-only.`]})}),_jsxs(Accordion,{title:`How often is analytics data updated?`,defaultOpen:false,id:`how-often-is-analytics-data-updated`,children:[_jsx(_components.p,{children:`Analytics updates in real-time as you work. When you create Journeys, confirm bookings, record payments, or change statuses, the data refreshes automatically.`}),_jsx(_components.p,{children:`Refresh the page if you’ve just made changes and don’t see them reflected.`})]}),_jsxs(Accordion,{title:`Why do my Agencies and Financial numbers look different?`,defaultOpen:false,id:`why-do-my-agencies-and-financial-numbers-look-different`,children:[_jsx(_components.p,{children:`They measure different things and may use different time ranges or filters:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Agencies`}),` focuses on commission calculations from confirmed trips`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Financial`}),` shows the full picture: revenue, cost, margin, commission, and payment collection`]}),`\n`]}),_jsx(_components.p,{children:`The Financial tab also has a Zero-margin Services filter that can change the numbers. Make sure you’re comparing with the same filter and date range. Both tabs honour the same per-service financial treatment, so cancelled services are never a source of disagreement between them.`})]}),_jsxs(Accordion,{title:`Why does the Financial tab show different numbers than the Pricing tab on a trip?`,defaultOpen:false,id:`why-does-the-financial-tab-show-different-numbers-than-the-pricing-tab-on-a-trip`,children:[_jsx(_components.p,{children:`If you notice the revenue or cost in the Financial analytics table doesn’t match what you see on a trip’s Pricing tab, check these filters:`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Zero-margin Services`}),` — If this toggle is off, at-cost services (where selling price = supplier cost) are excluded from the Financial tab. The Pricing tab always shows all services. Turn this toggle on to match.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Snapshot freshness`}),` — Journey Financials updates immediately; the Financial tab reads a nightly snapshot. If you just changed a service, wait for the next refresh before comparing.`]}),`\n`]}),_jsxs(_components.p,{children:[`Cancelled services are not a source of difference: both views apply the same per-service Include/Exclude choice. (The Pricing tab’s own “Include cancelled services” checkbox only controls what is `,_jsx(_components.em,{children:`listed`}),` on the quote, not what analytics counts.)`]}),_jsx(_components.p,{children:`When the filter and the snapshot date match, the numbers should be identical.`})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`related-documentation`,children:`Related Documentation`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/features/proposals`,children:`Journeys`}),` - Understanding Journey statuses and lifecycle`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/features/itineraries`,children:`Confirmed Journeys`}),` - Managing confirmed trips`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/features/invoices`,children:`Invoices`}),` - Creating invoices and tracking payments`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/features/travel-agents`,children:`Travel Agents`}),` - Managing agent relationships and commissions`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/features/settings`,children:`Settings`}),` - Configuring currencies and exchange rates`]}),`\n`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Working in the app? Select the `,_jsx(_components.strong,{children:`?`}),` icon in the bottom-right corner of this screen to open its Help panel, which also has a `,_jsx(_components.strong,{children:`Contact support`}),` button for a live chat with our team.`]})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Analytics","description":"Track Journey conversions, earnings, financials, traveler patterns, and supplier performance across your business.","icon":"chart-line","href":"/features/analytics"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"What Data Is Included?","slug":"what-data-is-included","depth":2,"children":[]},{"title":"Business Overview Tab","slug":"business-overview-tab","depth":2,"children":[{"title":"Who Sees What","slug":"who-sees-what","depth":3,"children":[]},{"title":"Performance Lens","slug":"performance-lens","depth":3,"children":[]},{"title":"Financial Lens","slug":"financial-lens","depth":3,"children":[]},{"title":"Filters","slug":"filters","depth":3,"children":[]},{"title":"Exporting","slug":"exporting","depth":3,"children":[]}]},{"title":"Agencies Tab","slug":"agencies-tab","depth":2,"children":[{"title":"Agencies Lens","slug":"agencies-lens","depth":3,"children":[]},{"title":"Travel Agents Lens","slug":"travel-agents-lens","depth":3,"children":[]},{"title":"How Cancellations Are Handled Here","slug":"how-cancellations-are-handled-here","depth":3,"children":[]},{"title":"Exporting","slug":"exporting-2","depth":3,"children":[]}]},{"title":"Travelers Tab","slug":"travelers-tab","depth":2,"children":[{"title":"Who Sees What","slug":"who-sees-what-2","depth":3,"children":[]},{"title":"North Star Metrics","slug":"north-star-metrics","depth":3,"children":[]},{"title":"Charts","slug":"charts","depth":3,"children":[]},{"title":"Top Returning Travelers","slug":"top-returning-travelers","depth":3,"children":[]},{"title":"Top Primary Travelers Table","slug":"top-primary-travelers-table","depth":3,"children":[]},{"title":"What Counts As A Traveler Or A Journey","slug":"what-counts-as-a-traveler-or-a-journey","depth":3,"children":[]},{"title":"Filters","slug":"filters-2","depth":3,"children":[]}]},{"title":"Financial Tab","slug":"financial-tab","depth":2,"children":[{"title":"Cancelled Services","slug":"cancelled-services","depth":3,"children":[]},{"title":"Zero-Margin Services Filter","slug":"zero-margin-services-filter","depth":3,"children":[]},{"title":"Understanding Invoiced vs. Revenue","slug":"understanding-invoiced-vs-revenue","depth":3,"children":[]}]},{"title":"Services Tab","slug":"services-tab","depth":2,"children":[{"title":"Who Sees What","slug":"who-sees-what-3","depth":3,"children":[]},{"title":"The Table","slug":"the-table","depth":3,"children":[]},{"title":"Filters","slug":"filters-3","depth":3,"children":[]}]},{"title":"Suppliers Tab","slug":"suppliers-tab","depth":2,"children":[]},{"title":"Date Modes: Trip Date vs. Booking Date","slug":"date-modes-trip-date-vs-booking-date","depth":2,"children":[]},{"title":"Period Selector","slug":"period-selector","depth":2,"children":[]},{"title":"Multi-Currency Support","slug":"multi-currency-support","depth":2,"children":[]},{"title":"Key Metrics Glossary","slug":"key-metrics-glossary","depth":2,"children":[]},{"title":"Common Questions","slug":"common-questions","depth":2,"children":[]},{"title":"Related Documentation","slug":"related-documentation","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"odia","siteName":"Odia App","title":"Analytics - Odia App","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-10T04:26:22.246Z","originalFileLocation":"features/analytics.mdx"},"headHtml":"\u003cmeta data-mint-head name=\"description\" content=\"Track Journey conversions, earnings, financials, traveler patterns, and supplier performance across your business.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Odia App\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/odia/DJjpirwL5YgJ8QJs/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/odia/DJjpirwL5YgJ8QJs/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/odia/DJjpirwL5YgJ8QJs/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/odia/DJjpirwL5YgJ8QJs/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/odia/DJjpirwL5YgJ8QJs/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/odia/DJjpirwL5YgJ8QJs/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/odia/DJjpirwL5YgJ8QJs/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/odia/DJjpirwL5YgJ8QJs/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/odia/DJjpirwL5YgJ8QJs/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Analytics - Odia App\">\u003cmeta data-mint-head property=\"og:description\" content=\"Track Journey conversions, earnings, financials, traveler patterns, and supplier performance across your business.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Odia App\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://help.odia.app/features/analytics\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Analytics - Odia App\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Track Journey conversions, earnings, financials, traveler patterns, and supplier performance across your business.\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/odia/DJjpirwL5YgJ8QJs/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Odia App\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#5D4CFE\">\u003clink data-mint-head rel=\"canonical\" href=\"https://help.odia.app/features/analytics\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/features/analytics.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://help.odia.app/#organization\",\"name\":\"Odia App\",\"url\":\"https://help.odia.app\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/odia/_zF2hPP6XMmp5V-k/logo/light.svg?fit=max\u0026auto=format\u0026n=_zF2hPP6XMmp5V-k\u0026q=85\u0026s=e99f3cadea1ec1a2a4c536b41e39a4d5\"}},{\"@type\":\"WebSite\",\"@id\":\"https://help.odia.app#website\",\"name\":\"Odia App\",\"url\":\"https://help.odia.app\",\"publisher\":{\"@id\":\"https://help.odia.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://help.odia.app/features/analytics#webpage\",\"url\":\"https://help.odia.app/features/analytics\",\"name\":\"Analytics\",\"description\":\"Track Journey conversions, earnings, financials, traveler patterns, and supplier performance across your business.\",\"dateModified\":\"2026-09-10T04:26:22.246Z\",\"isPartOf\":{\"@id\":\"https://help.odia.app#website\"},\"breadcrumb\":{\"@id\":\"https://help.odia.app/features/analytics#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://help.odia.app/features/analytics#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Features\",\"item\":\"https://help.odia.app/features/library\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Analytics\",\"item\":\"https://help.odia.app/features/analytics\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://help.odia.app/features/analytics#article\",\"headline\":\"Analytics\",\"name\":\"Analytics\",\"description\":\"Track Journey conversions, earnings, financials, traveler patterns, and supplier performance across your business.\",\"url\":\"https://help.odia.app/features/analytics\",\"mainEntityOfPage\":{\"@id\":\"https://help.odia.app/features/analytics#webpage\"},\"dateModified\":\"2026-09-10T04:26:22.246Z\",\"publisher\":{\"@id\":\"https://help.odia.app/#organization\"},\"isPartOf\":{\"@id\":\"https://help.odia.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Odia App\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Odia App","nav":{"global":null,"tabs":[{"tab":"Documentation","groups":[{"group":"Get Started","pages":[{"title":"Welcome to Odia","href":"/introduction"},{"title":"Signup to Odia with Stripe subscriptions","href":"/onboarding/signup-stripe"},{"title":"Connect a WhatsApp number","href":"/onboarding/connect-whatsapp"}]},{"group":"Features","pages":[{"group":"Library","pages":[{"title":"Library","icon":"bell-concierge","href":"/features/library"},{"title":"Service Variants","icon":"code-branch","href":"/features/variants"},{"title":"Service Bundles","icon":"layer-group","href":"/features/bundles"},{"title":"Templates","icon":"clone","href":"/features/templates"}]},{"group":"Journeys","pages":[{"title":"Journeys","icon":"route","href":"/features/proposals"},{"title":"Journey Builder","icon":"diagram-project","href":"/features/journey-builder"},{"title":"Journey Financials","icon":"table-list","href":"/features/journey-financials"},{"title":"Dynamic Pricing","icon":"calculator","href":"/features/dynamic-pricing"},{"title":"Journey Designer","icon":"palette","href":"/features/journey-designer"},{"title":"Journey Translations","icon":"language","href":"/features/journey-translations"},{"title":"Follow-ups","icon":"clock-rotate-left","href":"/features/follow-ups"},{"title":"Confirmed Journeys","icon":"route","href":"/features/itineraries"}]},{"title":"Workspace Search","icon":"magnifying-glass","href":"/features/global-search"},{"title":"Concierge","description":"Your comprehensive daily operations dashboard for managing travel services. See active services across confirmed Journeys in one centralized view.","icon":"headset","href":"/features/concierge"},{"title":"Analytics","icon":"chart-line","href":"/features/analytics"},{"group":"Financials","pages":[{"title":"Financials","description":"The central hub for invoices, supplier commissions, and travel agent commissions across every Journey.","icon":"sack-dollar","href":"/features/financials"},{"title":"Invoices","icon":"file-invoice-dollar","href":"/features/invoices"},{"title":"Supplier Commissions","icon":"hand-holding-dollar","href":"/features/supplier-commissions"}]},{"title":"Messaging","icon":"message","href":"/features/messaging"},{"title":"Email setup","icon":"envelope","href":"/features/email-setup"},{"title":"Tasks","icon":"clipboard-list-check","href":"/features/tasks"},{"title":"Travellers","icon":"person-walking-luggage","href":"/features/travelers"},{"title":"Travel Agents \u0026 Agencies","icon":"handshake","href":"/features/travel-agents"},{"title":"Suppliers","icon":"truck","href":"/features/suppliers"},{"title":"Settings","icon":"gear","href":"/features/settings"},{"title":"AI Credits","icon":"sparkles","href":"/features/ai-credits"}]},{"group":"Best practices","pages":[{"title":"Tips \u0026 Best Practices","icon":"circle-exclamation","href":"/best-practices/tips"},{"title":"Videos","icon":"video","href":"/best-practices/videos"},{"title":"FAQs","icon":"circle-question","href":"/best-practices/faqs"},{"title":"Bug Reporting","icon":"bug","href":"/best-practices/bug-reporting"}]},{"group":"Onboarding","pages":[{"title":"Welcome to Odia","href":"/onboarding/welcome"},{"title":"Admin Setup Guide","icon":"user-tie","href":"/onboarding/admin-setup"},{"title":"Data Entry","icon":"database","href":"/onboarding/data-entry"},{"title":"CRM \u0026 Inventory","icon":"address-book","href":"/onboarding/crm"},{"title":"Create Your First Journey","icon":"plus","href":"/onboarding/add-proposal"},{"title":"Journeys Screen","icon":"route","href":"/onboarding/proposal-screen"},{"title":"Confirmed Journeys","icon":"route","href":"/onboarding/itinerary"},{"title":"Concierge","icon":"headset","href":"/onboarding/concierge"},{"title":"Tasks","icon":"list-check","href":"/onboarding/tasks"},{"title":"Invoices","icon":"file-invoice-dollar","href":"/onboarding/invoices"}]}]},{"tab":"Releases","pages":[{"title":"Releases","href":"/releases/2026-releases"}]},{"tab":"Roadmap","pages":[{"title":"Roadmap","href":"/roadmap/2024-2025"}]}]},"title":"Analytics - Odia App","buildId":"dpl_37ZDLJcyt8yhrTVF6LiYvX7LvmXB","deploymentId":"dpl_37ZDLJcyt8yhrTVF6LiYvX7LvmXB","dynamics":[],"chunks":[]}