📊 The State of Aesthetics: H1 2026 Industry Benchmark is live: 100+ brands, 54 dimensions. Read the report & benchmark your practice with the built in tool
Data & AI Insights

From Raw Data to Trusted Answers

The work that turns raw source data into accurate reports and AI answers.

CD CorralData August 25, 2026
On this page

    Most of your systems are built to operate workflows, not for reporting and analytics.

    The systems your business uses for everyday operations — your EMR, CRM, scheduling software, point of sale, etc. — are primarily systems of record. They generate data as a byproduct of running your workflow: booking an appointment, taking a payment, logging who a patient is. Making that data useful for business intelligence, and enabling AI to accurately answer questions like “how should paid media be optimized to get to our growth target?”, requires data to be joined across several of these systems.

    If a reporting dashboard is built straight from those source systems, more than one thing goes wrong at once. The same appointment shows up twice because two systems logged it independently. A typo on an intake form turns one patient into two. And underneath that sits the harder problem: what's the truth? What counts as a “new patient” or “net revenue”? That should be determined by how your business wants it defined, not your source systems.

    The takeaway: Turning operational data into something usable for reporting, business intelligence, and AI analytics requires cleaning it, structuring it, and encoding the business decisions that tell it what it means.

    The CorralData Architecture

    CorralData's whole stack is below, and it shows how data flows from your source systems through to data visualization and AI agents. This piece will cover the middle: from ingestion and transformation to data models and the semantic layer.

    CorralData architecture diagram: source systems (Zenoti, ModMed, HubSpot, Meta Ads, QuickBooks, and 600+ others) flow through ingestion and transformation into a governed data warehouse holding data models and the semantic layer, then out to two lanes — Visualization (CorralData boards and widgets) and AI Agents (AskCorral, CorralData MCP) — which in turn feed Reverse ETL and Corral Activate, writing back to the source systems.
    Fig. 1 — The CorralData architecture: source systems flow through ingestion & transformation into a governed warehouse with data models and a semantic layer, then out to visualization and AI agents.

    What happens after data is connected

    Your data is processed through five steps before it's used in dashboards or queried by AI:

    Ingestion & Transformation
    Data Modeling
    Step 1 Sync data
    Step 2 Clean and standardize
    Step 3 Decide what things mean
    Step 4 Build the reusable pieces
    Step 5 Add the semantic layer

    Step 01

    Sync data

    Data from every source system is extracted and synced into the data warehouse on a set schedule. Every successful sync automatically updates the Data Dictionary with what each table stores, what each column means, and how many columns it has.

    This is structural, and catalogs what's sitting in the warehouse, not what any of it means for the business — that comes in Step 3.

    NameDescriptionColumns
    facebook_ads.
    account_history
    Historical data on advertising accounts: status, spending, business details, configuration settings. idageaccount_status+91
    hubspot.
    event
    Events related to CRM activity: event types, timestamps, user agents, URLs, and associated properties. synced_atidobject_idobject_typeoccurred_at+91
    zenoti.
    memberships
    Membership details including pricing, booking options, and configurations. extracted_atmembership_idannual_fee_collection_type+34
    The Data Dictionary: every warehouse table and column, documented automatically after each sync.

    Step 02

    Clean and standardize

    When data first lands in the warehouse, it's raw, which means it's shaped the way each source system sent it, and can be messy, including cryptic column names and different conventions per system. Transformation cleans that up and reshapes raw tables into clean, consistent, report-ready tables.

    Cleaning

    Standardizes formats and fixes structural inconsistencies. For example, a date stored as text in one system and as a timestamp in another becomes one format.

    Deduplicating

    Removes redundant records. For example, a cancelled appointment logged two different ways across systems becomes one cancelled appointment.

    We reconcile the cleaned data against the source systems. If the two don't agree within a fraction of a percent, we don't move forward. That said, if a source system already holds an error — for example, a typo in a Google Sheet feeding the warehouse — this is where we're most likely to catch it and flag it to your team to rectify. We can't manufacture a number that never existed at the source. What we can promise is that once a number is right, it stays right everywhere.

    Step 03

    Decide what things mean, and who sees what

    As we begin data modeling, two things have to be decided: what metrics mean (definitions), and who's allowed to see which rows (related to row-level security).

    Deciding what things mean

    Start from CorralData definitions

    CorralData brings standard metric definitions for your vertical, so your team confirms a starting point instead of defining everything from scratch.

    Or define your own

    Define metrics your way. For example, if your business measures revenue or a new customer in a specific way, this is the time to share it.

    Each of these gets documented: the metric name, its definition in plain language, and the formula behind it.

    MetricDefinitionFormula
    Core Revenue Revenue on the sale date, across core service and product lines. SUM(revenue)
    WHERE is_core_revenue
    Ticket AOV Core revenue per completed service visit. SUM(core_revenue)
    / SUM(service_units)
    New Patients A first visit with a paid service attached. COUNT(DISTINCT patient_id)
    WHERE is_first_paid_visit
    A few metric definitions, documented as a name, a plain-language definition, and the formula behind it.

    Deciding who sees what

    If your account needs row-level security (RLS), so that specific team members can only see the data they're allowed to see on a shared board, we build the tables to filter that way from the start. Deciding it after the tables exist isn't a setting we flip; it's a rebuild of every affected dataset.

    Step 04

    Build the reusable pieces: data models

    Using the decisions from Step 3, we assemble the clean data into data models: the queryable tables AskCorral reads to answer questions and build boards and data apps from.

    Data models are organized around the entities of a business, not around individual metrics: appointments, sales, customers, locations, services, employees, etc. Each model brings together everything about one of those entities — the events that happened and the things involved in them — into a single ready-to-query table.

    Building this way means one model can answer many different questions without being rebuilt every time someone asks something new. For example, one appointment model can answer questions about revenue, visit volume, no-show rate, and provider utilization. A model built narrowly around one metric only ever answers that one question.

    It also changes what AI can do with the data. Because models represent entities rather than fixed answers, AskCorral — or your own AI agent with CorralData MCP connected — can combine models to answer questions nobody built in advance: appointments joined with locations, customers joined with services.

    Each model is written in SQL, which is where a metric definition or business rule (from Step 3) can actually be enforced. “Revenue excludes gift cards” written as a query becomes a column every board, report, and AI answer reads the same way.

    Edit Data Model
    Data model name
    Sales Invoices
    Description
    Each row represents 1 line item on a sold invoice. Includes business logic to identify Gold Membership and line items related to Core Revenue. Excludes all gift card purchases.
    SQL query
    SELECT s2.*, CASE WHEN s2.item_type = 'Membership' AND (LOWER(s2.item_name) LIKE '%gold%' OR …) THEN TRUE ELSE FALSE END AS is_gold_membership, …
    Query results
    invoice_id invoice_no sale_date center_id item_name is_gold_
    membership
    is_core_
    revenue
    sales_exc…
    9c64bf03-e27e… LA-R-221 2023-12-02 4a0aaa74… Hydrafacial false true 249.00
    dda71751-5297… BH-R-9893 2023-12-02 9260cdc7… Gold Membership true false 99.00
    Displaying query results 1 – 50 of 100
    A data model panel in CorralData, which carries its name, a plain description of what it represents, the query that produces it, and the data that query returns.

    Step 05

    Add the semantic layer and governance controls

    With data models in place, we have the building blocks for reporting, dashboards, and AskCorral to answer your business questions. That said — and this is a challenge for AI analytics across the industry — there are still cases where two people ask about revenue and get two different numbers. That isn't because the data is wrong, it's because there's more than one way to calculate it: a different join across data models, a different filter, a different definition of what counts. Left ungoverned, AI can take various paths and land on a different answer each time. CorralData adds a semantic layer and data governance controls to prevent that from happening.

    The semantic layer

    Think of it as the instruction manual for AI on how to use the data models: it spells out metric definitions, how a data model can connect to other models, and what different time windows mean and how they should be applied. This ensures a question, which AI translates into a SQL query, resolves the same way every time. There's no separate screen for this — it's attached to the data models.

    Governance

    Once a data model is built, it needs to be protected. Every model carries controls for who can author and edit it, whether it's locked down (governed) or open, and whether it's been verified.

    Edit Data Model
    Data model name
    Sales Invoices
    Description
    Each row represents 1 line item on a sold invoice. Includes business logic to identify Gold Membership and line items related to Core Revenue. Excludes all gift card purchases.
    Permissions mode
    Governed Selected people Anyone Verified
    GovernedWhen this is selected, the SQL query and the encoded definitions are locked so no one can change it except admins.
    VERIFIEDMarks that the data model is approved by your organization for wide use.
    Every data model carries permissions: whether it's governed (locked to admin-only edits) or open, and whether it's been verified for wide use.

    Same verified numbers, wherever they're viewed

    That is the whole path: raw operational data landed and cleaned in the data warehouse, the definitions agreed on with your team, data models built around the entities of your business, and a semantic layer and governance controls locking those definitions and joins in place. That's what feeds your CorralData boards, your scheduled reports, and AskCorral when someone asks a business question.

    And if your account needs row-level security, it's enforced at the database, and AskCorral respects the same boundary. AskCorral only answers from what a user is authorized to see. If a data model is out of scope, it says so instead of guessing or working around the restriction.

    Five steps, all of them in service of one thing: a number that is defined once and means the same thing everywhere it is used.

    The output
    Semantic and governed
    data models

    Cleaned, reconciled, defined with your team, and governed, ready to be queried

    CorralData Boards and Data Apps
    Instant Insights scheduled reports
    AskCorral or your AI agent via CorralData MCP

    This is the unglamorous part of analytics, and it is most of the work. We do it so your team can spend their time acting on the numbers and insights with confidence.

    See how this works for your data

    See how business questions are answered accurately from your own data in a live demo with our team.

    Book a Demo

    Frequently asked questions

    Does this mean CorralData is storing our patient or customer data somewhere separate?

    Your data lives in a warehouse built for this specifically: either an isolated CorralData-managed environment, or your own warehouse that CorralData queries in place if you already have one. Either way, HIPAA controls and encryption at rest apply, and if your account needs row-level security, it's enforced at the database itself, not layered on top after the fact.

    What's the difference between "syncing" data and "modeling" it?

    Syncing gets the data out of your source systems and into the data warehouse so it's all centralized. Modeling is what makes it usable. We take the synced and cleaned data and organize it around your business as data models that AskCorral and your reports actually read from.

    Does this change how our front-desk or clinical staff enter data day to day?

    No. This whole process happens after data leaves your systems, not at the point where it's entered. Your team keeps using systems like Zenoti, ModMed, HubSpot, whatever you already run, the same way they do now.

    Who decides what a metric like "net revenue" means, CorralData or us?

    You do, either way. CorralData brings standard metric definitions for your vertical so you're not starting from a blank page, but you can adopt those as is or define things your own way. Once it's decided, it gets documented (name, plain-language definition, formula) and locked into the data model so it stays consistent everywhere.