Export Chat, Contact, Ticket, Call-Log, and Goal data as CSV — filtered as precisely as the module page that owns the data, generated in the background, and delivered via a time-limited download link.

TL;DR

  • What it is — an admin-only CSV export surface. Pick a report type, apply filters as rich as the underlying module's own filter UI, trigger generation, come back when it's ready, download.
  • Who it's for — Admins and Account Owners only. Users are blocked at the page and at the API.
  • Top outcome — get raw data into Excel, BI, or another system — with the same filter precision as the module pages — without keeping a browser tab open for the whole run.

At a glance

Plan tierAll paid tiers.
Who can use itAccount Owners and Admins only. Users see an Access Restricted message on the page.
Report typesChat, Contact, Ticket, Call-Log, Goal.
IntegrationsCSV stored on Lodgestory and delivered via a time-limited download URL (expires after 1 hour).
Top limits1 report per type per organisation per 5 minutes. Large exports are streamed, so there's no hard row cap.
APIYes — partner API (JWT-protected) for requesting, listing, and downloading reports.

How to find it

Sidebar → Reports. Non-admins see the Access Restricted card instead of the page contents.

Direct URL: https://lodgestory.com/crm/reports

📸 [SCREENSHOT: reports-nav.png — sidebar with Reports highlighted]

What is Reports?

The problem it solves

The Analytics dashboard answers "how is the team doing?" at a glance but doesn't export. The module pages (Tickets, Calls, Contacts, and so on) let you filter live but can't hand the filtered slice to Excel. Reports fills that gap with the exact filter vocabulary of each module page, lifted to a background CSV export.

Background generation matters because a large organisation's six months of chats can take minutes to export — nobody wants a browser tab open on a 15-minute request.

What you get

  • Five report types, each with filters that mirror the live module page:
    • Chat — the richest filter set (about 25 dimensions): archive / priority / bot handling / unanswered / assignment / workflow / labels / channels / date range / search. CSV has 30+ columns including contact, assignment, state, ticket count, goal-event summaries, and one column per custom field from every active contact template.
    • Contact — 11 base columns plus one column per unified custom field across your organisation's contact templates. Filters: search, has-chats, channel, creator, date range, plus custom-field predicates.
    • Ticket — 15 columns. Filters: status, priority, assignee, creator, ticket workflow, date range, search.
    • Call Log — 22 columns including talk / ring / total durations, hang-up cause, agent / customer / chat linkages, and recording availability. Filters: direction, status, agent, account, date, duration range, search.
    • Goal — columns are built per run based on the goals and trackers that fired in the period, so the CSV shape adapts to the data.
  • Background generation. Request, come back when ready, download. The page auto-polls every few seconds while any report is pending.
  • Rate-limited. One report per type per organisation per 5 minutes — prevents duplicate heavy exports.
  • Streamed generation — no memory blow-up on large exports.
  • Time-limited download URLs — expire after 1 hour.

How it's different

  • Two API surfaces, one module. The in-app UI is available to Admins and Account Owners on the web. The partner API is published on the public OpenAPI spec with example payloads per type, so integrators can drive exports without opening the CRM.
  • Role enforcement is belt-and-braces. The frontend hides the page from non-admins. The API additionally verifies the role on each call and returns an error if it's missing. Non-admins who know the URL can't pull a report.
  • Goal reports discover their shape from the data. Because every journey configures its own goals and trackers, the CSV is built per run — making the export stable regardless of how goals evolved over the period.

Customer scenarios

  • Month-end ops review. Admin exports a Chat report for the previous month filtered to Open + High priority. Opens in Excel. Pivots response-time metrics against agent for the monthly review.
  • Finance reconciliation. Finance admin exports Call Logs for a specific telephony account over the billing cycle. Reconciles against the provider's invoice by duration and direction.
  • Compliance audit. Admin exports Tickets filtered by issue category and date range. Hands the CSV to the compliance team.

How it fits with the rest of Lodgestory

Upstream: filters mirror the live UI of Home, Tickets, Contacts, Calls, and Bot Journey Goals. The CSVs contain the same data the UI surfaces at the same filter grain. Reports is the export of everything below the fold; Analytics is the at-a-glance dashboard.

Core concepts

TermWhat it means
Report jobThe export row. Has a type, a status (Pending → Processing → Completed / Failed), a filter payload, a requester, a generated file, and timestamps.
Report typeChat, Contact, Ticket, Call Log, or Goal.
StatusPending (just requested), Processing (being generated), Completed (ready to download), or Failed (with an error message).
Filter payloadThe filter values you picked when requesting the report. Different per report type.

Quick Start — your first report in 3 minutes

Step 1 — Open Reports

Sidebar → Reports. If you see Access Restricted, you don't have the Admin or Account Owner role.

Step 2 — Pick a report type

Top selector: Chat / Contact / Ticket / Call Log / Goal. A type-specific description appears.

Step 3 — Set filters

Open the filter panel — the filter vocabulary matches the corresponding module's live page (Ticket filters include priority, status, assignee, creator, workflow, date range, and search).

Step 4 — Click Generate Report

A row appears with status PendingProcessing. The list auto-refreshes every few seconds.

Step 5 — Download

When status flips to Completed, click Download. The system generates a download URL (valid for 1 hour) and opens it in a new tab.

Rate-limit note: requesting the same type twice within 5 minutes returns a conflict and points you at the existing record. Wait until the window elapses or reuse the existing CSV.

How it works

When you request an export, Lodgestory:

  1. Checks that no export of the same type is already pending, processing, or completed in the last 5 minutes.
  2. Creates a job record.
  3. Queues a background worker to generate the CSV.
  4. Updates the job's status as it progresses — Pending → Processing → Completed (or Failed with a reason).

When you click Download:

  1. Lodgestory generates a time-limited download URL.
  2. Your browser opens the URL in a new tab.
  3. The file is downloaded; the URL expires after 1 hour.

Large exports are streamed so memory usage stays flat regardless of row count.

Features in depth

Chat export

About 25 filter dimensions mirroring the Home inbox advanced filter panel: archived, high priority, has contacts, bot handled, unanswered, agent transferred, session closed, assignment, workflow, labels, channels, date range, chat name / contact search, chat type.

CSV output is 30+ columns including:

  • Chat identifiers, channel, timestamps.
  • Primary contact fields plus one column per custom field across all active contact templates.
  • Labels (comma-separated), current workflow state.
  • Flags: archived, high priority, autopilot.
  • Primary assignee name and email, all assignees, teams.
  • External-items values.
  • Notes count and summary (first 5, truncated).
  • Tickets count, open tickets, summary.
  • Bot session flag, goals, milestones, tracker values.

Contact export

11 standard columns plus one column per unified custom field across active templates. Filters: name / phone / email search, has-chats, channels, creator, date range, and custom-field predicates.

Ticket export

15 columns: ticket plus chat plus contact identifiers, issue, sub-issue, priority, status, remarks, assigned-to, created-by, workflow, media count, timestamps. Filters: status, priority, assignee, creator, ticket workflow, date range, and free-text search.

Call Log export

22 columns. Every call field: direction, status, caller / called numbers, caller-ID, agent, customer, chat linkage, talk / total / ring durations (both formatted and raw seconds), hang-up cause, recording availability, timestamps, account, provider. Filters: direction, statuses, agent, account, date, has-recording, has-chat, duration range, phone / contact search, hang-up cause.

Goal export

Goal exports don't have a fixed CSV shape — they derive it from the data. Lodgestory scans the matched chats' latest bot-journey sessions, finds the maximum goal-event count per chat and the union of tracker names at each event position, and writes a CSV with 11 static columns (chat identifiers, journey, session, total event count) followed by dynamic per-event-position columns: Goal N Name, Goal N Milestone, Goal N Recorded At, and one column per tracker name at that position.

Filters: goal-event date range, goal IDs, channels, and tracker-value predicates.

Roles and permissions

ActionAccount OwnerAdminUser
Open /crm/reports✗ (Access Restricted)
Request an export (web or API)
List exports
Download a completed export

Cross-module workflows

  • Monthly ops review. Chat export, previous-month filter, High priority — into Excel for agent performance review.
  • Finance reconciliation. Call Log export over the billing cycle, filtered to a specific telephony account — reconciled against the provider invoice.
  • Compliance audit. Ticket export with specific issue categories and date range — handed to compliance.

Limits a user will run into

LimitValue
Rate1 export per type per organisation per 5 minutes
Download URL expiry1 hour
Max rows / file sizeNo hard cap — streamed
List auto-refreshEvery few seconds while any export is pending or processing

Errors & FAQ

You seeLikely reasonWhat to do
A report of this type is already being generatedA pending or processing job existsWait for it to finish or reuse
A report was completed recently. Please wait before requesting another.Same type finished in the last 5 minutesReuse the existing CSV, or wait
Report not foundWrong ID or cross-organisation accessVerify the link; switch organisation if needed
Report generation failedBackground job hit an unexpected errorInspect the error message; retry or contact support
Report file not availableFile missing despite a completed statusContact support
Failed to generate download URLTemporary storage issueRetry in a minute
Only Admin or Owner can access reportsMissing roleRequest Admin privileges
Report is still being generated. Please wait.Download before it's readyWait; the list auto-refreshes

Frequently asked

Why is the 5-minute rate limit per type, not per user?
Because the generation cost is the same regardless of who triggered it. Two admins clicking Generate on the same type within the same minute would double the load for identical output.

Can I schedule recurring exports?
Not today. Each export is on demand.

Why can't Users even see the Reports page?
Raw CSV exports can contain cross-chat data that would bypass the per-user inbox visibility. Reports are gated at both the UI and the API to keep that rule intact.

Why is my Goal CSV's column count different from last week's?
Goal exports compute their layout from the data — if new goals fired or new trackers populated in the window, the column count reflects that. Each CSV is self-describing.

Can I get exports by email?
Not currently. Come back to the Reports page to download.

API

Reports is one of the partner-facing APIs. See the Reports tag on the public API docs for full schemas and example requests. In short:

  • Request an exportPOST /api/wp-crm/reports/{organisationId} with a JWT bearer token and a filter payload.
  • List exportsGET /api/wp-crm/reports/{organisationId}.
  • Download a completed exportGET /api/wp-crm/reports/{organisationId}/{reportId}/download returns a download URL with an expiry.

See Authentication for the JWT flow.

Related modules & next steps