Dashello API

Push any data into your Dashello dashboard — numbers, tasks, events, or complex objects. Every connected app is inbound-only. Dashello never pushes your data outward.

Encrypted in transit
API key auth
Reliable
Any data type

Authentication

Every request to the API requires an API key sent as a Bearer token in the Authorization header. You generate API keys from your Dashello Settings → API Keys page.

Each API key is tied to your workspace. Data pushed with this key goes to your dashboard. Keys can be generated and revoked at any time from Settings → API Keys.

How to authenticate

# Include your API key in the Authorization header
curl https://dashello.co/api/ingest/metric \
  -X POST \
  -H "Authorization: Bearer dash_abc123..." \
  -H "Content-Type: application/json" \
  -d '{ "metric": "revenue", "value": 12345 }'

Key format

All API keys start with dash_ followed by a unique string. Example: dash_a1b2c3d4e5f6.... You can create named keys for each integration (e.g. "QuickBooks", "Stripe") and revoke them individually.

Header format

Authorization: Bearer dash_your_api_key_here

Errors

The API returns standard HTTP status codes and a JSON error body:

StatusErrorMeaning
401invalid_api_keyAPI key not found, revoked, or expired
400invalid_payloadMissing required fields or invalid value
404no_dashboardNo dashboard found for that API key
429rate_limitedToo many requests. See rate limits below
500internal_errorSomething went wrong on our end
# Example error response
{
  "error": "invalid_api_key",
  "message": "API key not found or revoked"
}

POST /ingest/metric

Push a single numerical value into a specific metric on your dashboard. This is the most common endpoint — use it for revenue, leads, costs, or any single number.

POSThttps://dashello.co/api/ingest/metric

Request body

metric
string required — Name or ID of the metric on your dashboard
value
number required — The numerical value to record
source
string optional — Source app identifier (e.g. "quickbooks", "stripe")
timestamp
string optional — ISO 8601 timestamp. Defaults to now
metadata
object optional — Additional context stored with the data point
zap_id
string optional — Zapier Zap ID for tracking (auto-used by Zapier)
zap_label
string optional — Label for the Zap in your Zapier integration page

Example — curl

curl https://dashello.co/api/ingest/metric \
  -X POST \
  -H "Authorization: Bearer dash_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "metric": "revenue",
    "value": 123456.78,
    "source": "quickbooks",
    "timestamp": "2026-05-20T12:00:00Z",
    "metadata": { "currency": "USD" }
  }'

Response — matched a metric

{
  "ok": true,
  "inboxed": false,
  "metric_id": "found",
  "previous_value": "$119,000.00",
  "new_value": "$123,456.78"
}

Response — no matching metric (inboxed)

{
  "ok": true,
  "inboxed": true,
  "metric_id": null,
  "previous_value": null,
  "new_value": "123,456.78"
}
Metric matching: The metric name is matched against your dashboard boxes by label (case-insensitive), by ID, or by the metric's connectedApps array. If no match is found, the data is stored in your Inbox for later mapping.

POST /ingest/batch

Push multiple metric values in a single request. Use this for efficiency when sending multiple data points at once.

POSThttps://dashello.co/api/ingest/batch

Request body

metrics
array required — Array of metric objects (each with metric, value, and optional source/timestamp)
source
string optional — Default source label for all metrics in the batch
zap_id
string optional — Zapier Zap ID for tracking
zap_label
string optional — Label for the Zap

Example

curl https://dashello.co/api/ingest/batch \
  -X POST \
  -H "Authorization: Bearer dash_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "metrics": [
      { "metric": "revenue", "value": 50000, "source": "quickbooks" },
      { "metric": "expenses", "value": 32000, "source": "quickbooks" },
      { "metric": "profit", "value": 18000, "source": "quickbooks" }
    ]
  }'

Response

{
  "ok": true,
  "results": [
    { "metric": "revenue", "status": "updated" },
    { "metric": "expenses", "status": "updated" },
    { "metric": "profit", "status": "inboxed" }
  ]
}

POST /ingest/data

Push any JSON data into your Dashello inbox. Unlike /ingest/metric, this endpoint accepts arbitrary objects, text, or complex data — invoices, contacts, leads, or any business object.

POSThttps://dashello.co/api/ingest/data

Request body

source
string optional — Source identifier (e.g. "quickbooks", "hubspot")
data_type
string optional — Type of data (e.g. "invoice", "contact", "project")
timestamp
string optional — ISO 8601 timestamp
...
Any other fields you include are stored as-is in the payload

Example — push an invoice object

curl https://dashello.co/api/ingest/data \
  -X POST \
  -H "Authorization: Bearer dash_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "source": "quickbooks",
    "data_type": "invoice",
    "invoice_id": "INV-1042",
    "customer": "Acme Corp",
    "total": 12500.00,
    "status": "paid",
    "due_date": "2026-06-01"
  }'

Response

{
  "ok": true,
  "inboxed": true,
  "message": "Data received and stored in inbox"
}
All /ingest/data payloads go to your inbox. From there you can browse the data and assign it to metric boxes on your dashboard.

POST /ingest/tasks

Push tasks directly into your Dashello Tasks page. Use this for importing tasks from project management tools like Asana, Trello, or Jira.

POSThttps://dashello.co/api/ingest/tasks

Request body

tasks
array required — Array of task objects, OR a single task object
source
string optional — Source identifier (appears as creator)

Each task object:

text
string required — Task description
dueDate
string optional — Due date (ISO 8601 or any date string)
priority
boolean optional — High priority flag
notes
string optional — Additional notes
linkedMetricId
string optional — Link this task to a specific metric box

Example

curl https://dashello.co/api/ingest/tasks \
  -X POST \
  -H "Authorization: Bearer dash_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "source": "asana",
    "tasks": [
      { "text": "Review Q2 budget", "dueDate": "2026-06-15", "priority": true },
      { "text": "Update team on project status", "notes": "Include timeline changes" }
    ]
  }'

Response

{
  "ok": true,
  "created": 2,
  "total": 17
}
New tasks appear on your Tasks page with the source as the creator. You can filter and manage them like any other task.

Native App Integrations

Dashello offers native OAuth 2.0 integrations for QuickBooks, Stripe, HubSpot, JobTread, and Google Sheets. These integrations pull data from each platform automatically — no manual setup or API calls required beyond the initial connection. Connected apps appear in your Integrations page where you can browse data catalogs, assign data points to dashboard metrics, and trigger one-click syncs.

How they work: You authorize Dashello to access your app account via OAuth (or a grant key for JobTread). Dashello then fetches your business data and stores it in a structured data catalog. You pick which data points you want on your dashboard, and they update automatically on each sync.

QuickBooks Integration

Connect QuickBooks Online to automatically sync your accounting data — P&L, balance sheet, invoices, bills, customers, accounts receivable, and more.

How to connect

1
Go to Integrations in Dashello

Navigate to Settings → Integrations → QuickBooks. Click "Connect."

2
Authorize with Intuit

You'll be redirected to Intuit's OAuth page. Log into your QuickBooks account and authorize Dashello to read your company data.

3
Initial sync

Once authorized, Dashello automatically syncs your QuickBooks data. Click "Sync Now" on the QuickBooks integration page to trigger a manual refresh anytime.

4
Assign data to your dashboard

Browse the data catalog, select the data points you want (e.g. "Revenue MTD", "Accounts Receivable", "Open Invoices"), and assign them to metric boxes on your dashboard.

Data catalog — 66 data points across 15 groups

Revenue & Profit

  • Revenue (MTD/YTD)
  • COGS (MTD/YTD)
  • Gross Profit (MTD/YTD)
  • Expenses (MTD/YTD)
  • Net Profit (MTD/YTD)
  • Balance Sheet

  • Total Assets
  • Current Assets
  • Total Liabilities
  • Current Liabilities
  • Total Equity
  • Cash & Liquidity

  • Cash on Hand
  • Checking/Savings
  • Accounts Receivable
  • Accounts Payable
  • Credit Card Balance
  • Invoices

  • Open Invoices
  • Overdue Invoices
  • Total Outstanding
  • Invoices Paid (MTD)
  • Avg Days to Pay
  • AR / AP Aging

  • AR Current/1-30/31-60/61-90/90+
  • AP Current/1-30/31-60/61-90/90+
  • Bills, Customers & More

  • Open/Overdue Bills
  • Active/New Customers
  • Active/New Vendors
  • Pending Estimates
  • Inventory Items
  • Gross Margin %, Profit Margin %
  • Connection management: You can disconnect QuickBooks at any time from the integration page. Disconnecting clears all synced data and removes dashboard assignments. The OAuth connection uses encrypted token storage and auto-refresh.

    API endpoints used

    ActionEndpoint
    ConnectGET /api/quickbooks
    OAuth callbackGET /api/quickbooks/callback
    Sync metricsGET /api/quickbooks?action=metrics
    DisconnectPOST /api/quickbooks

    Stripe Integration

    Connect Stripe to track payments, subscriptions, MRR, churn, customers, invoices, payouts, and processing fees — all automatically synced to your dashboard.

    How to connect

    1
    Go to Integrations in Dashello

    Navigate to Settings → Integrations → Stripe. Click "Connect."

    2
    Authorize with Stripe Connect

    You'll be redirected to Stripe's OAuth page. Authorize Dashello to access your account data (read_write scope).

    3
    Sync your data

    Once connected, click "Sync Now" to pull in your latest Stripe data — MRR, churn, revenue, customers, subscriptions, and more.

    4
    Assign data points to your dashboard

    Browse the data catalog and assign metrics like "Monthly Recurring Revenue", "Active Subscriptions", or "Payment Success Rate" to your dashboard boxes.

    Data catalog — 64 data points across 9 groups

    Revenue & Balance

  • MRR / ARR
  • Total Revenue (MTD/YTD)
  • Net Revenue (MTD)
  • ARPU
  • Available/Pending Balance
  • Subscriptions & MRR

  • Active/New/Cancelled Subs
  • Monthly/Annual Churn Rate
  • MRR Growth, MRR Churn
  • Net New MRR
  • Active Trials, Past Due
  • Customers

  • Total/Active/New Customers
  • Customer LTV
  • Retention Rate
  • Repeat Customer Rate
  • Invoices

  • Paid/Unpaid/Overdue
  • Total Billed (MTD)
  • Avg Invoice Value
  • Collection Rate
  • Payments & Risk

  • Successful/Failed Payments
  • Success/Dispute Rate
  • Refunds, Disputes
  • Card Brand Volumes
  • Payouts, Growth & Plans

  • Total Payouts (MTD)
  • Processing Fees
  • MRR/Revenue Growth %
  • Top Plan MRR/Subscribers
  • Auto-sync: Stripe data can be refreshed on-demand by clicking "Sync Now." A cron endpoint (/api/stripe-cron-sync) is available for scheduled background syncs.

    API endpoints used

    ActionEndpoint
    ConnectGET /api/stripe
    OAuth callbackGET /api/stripe-callback
    Sync metricsGET /api/stripe?action=metrics
    DisconnectPOST /api/stripe

    HubSpot Integration

    Connect HubSpot CRM to sync contacts, deals, pipeline stages, companies, and engagement activity — calls, meetings, emails, notes, and tasks.

    How to connect

    1
    Go to Integrations in Dashello

    Navigate to Settings → Integrations → HubSpot. Click "Connect."

    2
    Authorize with HubSpot

    You'll be redirected to HubSpot's OAuth page. Log in and authorize Dashello to read your CRM data (contacts, deals, companies, content).

    3
    Sync your data

    Click "Sync Now" on the HubSpot integration page. Dashello pulls contacts, deals, pipeline stages, companies, and engagement metrics.

    4
    Assign data to dashboard

    Assign data points like "Open Deals", "Win Rate", "New Contacts (MTD)", or "Total Pipeline Value" to your metric boxes.

    Data catalog — 26 data points across 5 groups

    Contacts

  • Total Contacts
  • New Contacts (MTD)
  • Contacts with Phone
  • Contacts with Email %
  • Unworked Contacts
  • Deals

  • Open Deals
  • Total Pipeline Value
  • Average Deal Size
  • Deals Won/Lost (MTD)
  • Win Rate
  • Avg Deal Age (Days)
  • Pipeline Stages

  • Stage 1–5 Deal Counts
  • Companies

  • Total Companies
  • New Companies (MTD)
  • Engagements

  • Calls (MTD)
  • Meetings (MTD)
  • Emails Sent (MTD)
  • Notes (MTD)
  • Tasks Completed/Overdue
  • Auto-sync: HubSpot has a cron endpoint (/api/hubspot-cron-sync) for scheduled background syncs. The OAuth connection uses refresh tokens with automatic rotation.

    API endpoints used

    ActionEndpoint
    ConnectGET /api/hubspot
    OAuth callbackGET /api/hubspot-callback
    Sync metricsGET /api/hubspot?action=metrics
    Cron syncGET /api/hubspot-cron-sync
    DisconnectPOST /api/hubspot

    JobTread Integration

    Connect JobTread to sync construction business metrics — active jobs, revenue, costs, gross profit, pipeline, accounts receivable, invoices, and job-level financials.

    How to connect

    1
    Get your Grant Key

    In JobTread, go to Settings → API and copy your Grant Key.

    2
    Connect in Dashello

    Go to Integrations → JobTread, paste the Grant Key, and click Connect. Dashello validates the key and discovers available data fields.

    3
    Webhooks are registered automatically

    Dashello registers a webhook with JobTread so your data stays updated when jobs, invoices, estimates, or payments change.

    4
    Assign data to dashboard

    Browse the data catalog — 60+ data points across 9 groups — and assign them to metric boxes. Per-job financials automatically populate project cards.

    Data catalog — 60+ data points across 9 groups

    Jobs

  • Active Jobs
  • Jobs Completed (Month/Year)
  • Active Job Value
  • Jobs On Budget %
  • Jobs Over Budget
  • Revenue

  • Revenue (Week/Month/Quarter/YTD)
  • Revenue Last Month
  • Avg Revenue Per Job
  • Profit

  • Gross Profit (Month/YTD)
  • Gross Profit %
  • Avg GP Per Job
  • Sales Pipeline

  • New Leads (Week/Month)
  • Estimates Sent (Month)
  • Proposals Approved
  • Closing Rate %
  • Open Pipeline Value
  • Cash & Receivables

  • AR Total / AR Over 30/60
  • AP Total
  • Deposits Received
  • Monthly Fixed Costs
  • Job Financials & More

  • Total Revenue / Cost / Profit
  • Total Margin
  • Approved Revenue / Cost / Profit
  • Invoices/Payments (Month)
  • Outstanding Invoices
  • Project cards: When you connect JobTread, per-job financials automatically create project cards on your Projects page — showing revenue, costs, margin, invoiced, paid, and overdue amounts for each job.

    API endpoints used

    ActionEndpoint
    ConnectPOST /api/jobtread-connect
    Manual syncGET /api/jobtread-sync
    Cron syncGET /api/jobtread-cron-sync
    Webhook receiverPOST /api/jobtread-webhook
    Status checkGET /api/jobtread-status
    HistoryGET /api/jobtread-history
    DisconnectPOST /api/jobtread-disconnect

    Google Sheets Integration

    Connect Google Sheets to pull live cell values into your Dashello dashboard. Map individual cells to metric boxes, and they update automatically.

    How to connect

    1
    Connect your Google account

    In Dashello Integrations → Google Sheets, click "Connect." Authorize Dashello to read your spreadsheets.

    2
    Add a spreadsheet

    Search for a spreadsheet by name or paste a Google Sheets URL. Dashello lists the sheets and their contents.

    3
    Map cells to metrics

    Click a cell, give it a label, and assign it to a metric box on your dashboard. The cell value (numeric or text) will update your metric.

    4
    Refresh anytime

    Click "Refresh" on a mapped cell to pull the latest value. Cells can be refreshed individually or in bulk.

    Use case: Keep a budget spreadsheet in Google Sheets and map the bottom-line cell to your Dashello dashboard. Every time you update the sheet and refresh, your dashboard updates.

    API endpoints used

    ActionEndpoint
    Connect / all actionsGET/POST /api/google-sheets?action=...
    OAuth callbackGET /api/google-sheets/callback

    Supported actions: connect, status, disconnect, search, add-by-url, list-spreadsheets, remove-spreadsheet, get-sheets, get-sheet-data, get-cell-value, map-cell, unmap-cell, list-mappings, refresh-cell.

    Zapier / Make Integration

    Connect Dashello to thousands of apps through Zapier or Make.com automation platforms. Use the API endpoints with your Dashello API key to push data from any trigger.

    Zapier

    1
    Create a Zap

    Choose your trigger app (e.g. Gmail, Typeform, Google Sheets).

    2
    Add "Webhooks by Zapier" action

    Select "POST" as the action event.

    3
    Configure

    URL: https://dashello.co/api/ingest/metric — Method: POST — Headers: Authorization: Bearer dash_your_api_key — Include zap_id and zap_label in the body to track Zaps in your Dashello Zapier page.

    4
    Test & publish

    Run a test and turn on your Zap. Active Zaps appear in your Dashello → Integrations → Zapier page.

    Make.com

    Dashello has a custom app on Make.com with 6 ready-to-use modules. Install it from the Make.com Developer Portal or use the HTTP module directly.

    The Dashello Make app modules:

    ModuleDescription
    Send a metric valuePushes a single metric value to your dashboard
    Send multiple metric valuesBatch push several metrics in one request
    Send custom dataSend invoices, contacts, leads to your inbox
    Create a taskCreates a new task with due date, priority, notes
    Send multiple tasksCreate multiple tasks at once from an array
    Make an API callCall any Dashello API endpoint with full control

    To set up a Make scenario, add a Dashello module, create a new connection by pasting your API key, and map the input fields from your trigger app.

    For step-by-step setup instructions, see the Make.com Dashello App README.

    Rate Limits

    LimitValueScope
    Requests per minute100Per API key
    Batch size100 itemsPer batch request
    Payload size5 MBPer request
    Need higher limits? If you're integrating at scale and need more throughput, contact us at hello@dashello.co and we'll work something out.

    SDK Examples

    No SDK is required — just HTTP. But here are ready-to-use snippets for common languages:

    Node.js

    const API_KEY = "dash_your_api_key";
    
    async function pushMetric(name, value, source) {
      const res = await fetch("https://dashello.co/api/ingest/metric", {
        method: "POST",
        headers: {
          "Authorization": `Bearer ${API_KEY}`,
          "Content-Type": "application/json",
        },
        body: JSON.stringify({ metric: name, value, source }),
      });
      return res.json();
    }
    
    // Usage
    await pushMetric("revenue", 50000, "quickbooks");

    Python

    import requests
    
    API_KEY = "dash_your_api_key"
    
    def push_metric(name, value, source="api"):
        res = requests.post(
            "https://dashello.co/api/ingest/metric",
            json={"metric": name, "value": value, "source": source},
            headers={"Authorization": f"Bearer {API_KEY}"}
        )
        return res.json()
    
    # Usage
    result = push_metric("leads", 47, "hubspot")
    print(result)

    curl

    curl -X POST https://dashello.co/api/ingest/metric \
      -H "Authorization: Bearer dash_your_api_key" \
      -H "Content-Type: application/json" \
      -d '{"metric": "revenue", "value": 12345, "source": "api"}'

    Google Apps Script

    function pushToDashello(metric, value) {
      const API_KEY = "dash_your_api_key";
      const options = {
        method: "post",
        headers: { "Authorization": "Bearer " + API_KEY },
        contentType: "application/json",
        payload: JSON.stringify({ metric, value, source: "google-sheets" }),
      };
      UrlFetchApp.fetch("https://dashello.co/api/ingest/metric", options);
    }
    
    // Use in a sheet trigger
    function onEdit(e) {
      pushToDashello("Sheet Updated", 1);
    }

    Need help integrating? We're happy to walk through it with you.

    Contact — hello@dashello.co