Reports
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 tier | All paid tiers. |
| Who can use it | Account Owners and Admins only. Users see an Access Restricted message on the page. |
| Report types | Chat, Contact, Ticket, Call-Log, Goal. |
| Integrations | CSV stored on Lodgestory and delivered via a time-limited download URL (expires after 1 hour). |
| Top limits | 1 report per type per organisation per 5 minutes. Large exports are streamed, so there's no hard row cap. |
| API | Yes — 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
| Term | What it means |
|---|---|
| Report job | The export row. Has a type, a status (Pending → Processing → Completed / Failed), a filter payload, a requester, a generated file, and timestamps. |
| Report type | Chat, Contact, Ticket, Call Log, or Goal. |
| Status | Pending (just requested), Processing (being generated), Completed (ready to download), or Failed (with an error message). |
| Filter payload | The 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 Pending → Processing. 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:
- Checks that no export of the same type is already pending, processing, or completed in the last 5 minutes.
- Creates a job record.
- Queues a background worker to generate the CSV.
- Updates the job's status as it progresses — Pending → Processing → Completed (or Failed with a reason).
When you click Download:
- Lodgestory generates a time-limited download URL.
- Your browser opens the URL in a new tab.
- 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
| Action | Account Owner | Admin | User |
|---|---|---|---|
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
| Limit | Value |
|---|---|
| Rate | 1 export per type per organisation per 5 minutes |
| Download URL expiry | 1 hour |
| Max rows / file size | No hard cap — streamed |
| List auto-refresh | Every few seconds while any export is pending or processing |
Errors & FAQ
| You see | Likely reason | What to do |
|---|---|---|
| A report of this type is already being generated | A pending or processing job exists | Wait for it to finish or reuse |
| A report was completed recently. Please wait before requesting another. | Same type finished in the last 5 minutes | Reuse the existing CSV, or wait |
| Report not found | Wrong ID or cross-organisation access | Verify the link; switch organisation if needed |
| Report generation failed | Background job hit an unexpected error | Inspect the error message; retry or contact support |
| Report file not available | File missing despite a completed status | Contact support |
| Failed to generate download URL | Temporary storage issue | Retry in a minute |
| Only Admin or Owner can access reports | Missing role | Request Admin privileges |
| Report is still being generated. Please wait. | Download before it's ready | Wait; 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 export —
POST /api/wp-crm/reports/{organisationId}with a JWT bearer token and a filter payload. - List exports —
GET /api/wp-crm/reports/{organisationId}. - Download a completed export —
GET /api/wp-crm/reports/{organisationId}/{reportId}/downloadreturns a download URL with an expiry.
See Authentication for the JWT flow.
Related modules & next steps
- Analytics — at-a-glance metrics; Reports is the raw-export counterpart.
- Home (Unified Inbox) — Chat export filters mirror the inbox filter panel.
- Tickets, Contacts, Calls, Bot Journeys — each module's filter vocabulary is carried into its export type.
Updated about 4 hours ago