Skip to content

Quickstart

This guide walks you through the core MeterBase workflow in about 5 minutes. By the end, you will have added a property, uploaded a bill, and run a savings analysis.


Prerequisites

  • A MeterBase account -- MeterBase uses a BDR-only sales flow (no self-service signup). Request a demo at meterbase.io to get started.
  • An API key (provided by your account representative or generated from Settings after onboarding)

Live URLs

  • Sales site: meterbase.io -- request a demo here
  • Application: app.meterbase.io -- log in here after onboarding
  • Demo account: demo@meterbase.io / demo1234 (read-only access to sample data)

Base URL

All examples below use https://app.meterbase.io as the base URL.


Step 1: Authenticate

Every API request requires a bearer token. Exchange your API key for a session token, or use the API key directly as a bearer token:

curl -X POST https://app.meterbase.io/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "you@company.com",
    "password": "your-password"
  }'

Response:

{
  "access_token": "eyJhbGciOiJIUzI1NiIs...",
  "token_type": "bearer",
  "user": {
    "id": 1,
    "email": "you@company.com",
    "name": "Jane Smith"
  }
}

Set the token for subsequent requests:

export TOKEN="eyJhbGciOiJIUzI1NiIs..."

Step 2: Create a Portfolio

Portfolios group properties together. Create one for your first batch of properties:

curl -X POST https://app.meterbase.io/api/portfolios \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "West Coast Apartments",
    "description": "Our California and Oregon multifamily portfolio"
  }'

Response:

{
  "id": 1,
  "name": "West Coast Apartments",
  "description": "Our California and Oregon multifamily portfolio",
  "property_count": 0,
  "created_at": "2026-03-25T10:00:00Z"
}

Step 3: Add a Property

Add a property to your portfolio. MeterBase automatically looks up the serving utility by ZIP code:

curl -X POST https://app.meterbase.io/api/properties \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "portfolio_id": 1,
    "name": "Sunset Apartments",
    "address": "1234 Sunset Blvd",
    "city": "Los Angeles",
    "state": "CA",
    "zip_code": "90028",
    "unit_count": 48,
    "square_footage": 52000
  }'

Response:

{
  "id": 1,
  "name": "Sunset Apartments",
  "address": "1234 Sunset Blvd",
  "city": "Los Angeles",
  "state": "CA",
  "zip_code": "90028",
  "unit_count": 48,
  "square_footage": 52000,
  "utility": {
    "id": 1247,
    "name": "Southern California Edison",
    "state": "CA"
  },
  "created_at": "2026-03-25T10:01:00Z"
}

Automatic Utility Detection

MeterBase uses its database of 120,015 ZIP-to-utility mappings to automatically identify which utility serves each property. You can override this if needed.


Step 4: Upload a Bill for AI Analysis

Upload a PDF utility bill. MeterBase's AI engine extracts charges, usage data, rate schedule information, and flags anomalies:

curl -X POST https://app.meterbase.io/api/bills/upload \
  -H "Authorization: Bearer $TOKEN" \
  -F "file=@june-2026-bill.pdf" \
  -F "property_id=1"

Response:

{
  "id": 1,
  "property_id": 1,
  "status": "analyzed",
  "period_start": "2026-05-01",
  "period_end": "2026-05-31",
  "total_amount": 4827.53,
  "total_kwh": 38200,
  "rate_schedule": "TOU-GS-2-B",
  "utility_name": "Southern California Edison",
  "charges": [
    {"type": "energy", "description": "On-Peak Energy", "amount": 2145.20},
    {"type": "energy", "description": "Off-Peak Energy", "amount": 1562.33},
    {"type": "demand", "description": "Demand Charge", "amount": 820.00},
    {"type": "fixed", "description": "Customer Charge", "amount": 300.00}
  ],
  "ai_insights": [
    "Bill amount is 12% higher than the 6-month average for this property.",
    "Demand charges represent 17% of total cost. Consider load management."
  ]
}

Step 5: Run Savings Analysis

With a bill on file, run a savings analysis to compare your current tariff against all available alternatives:

curl -X POST https://app.meterbase.io/api/savings/analyze \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "property_id": 1
  }'

Response:

{
  "property_id": 1,
  "current_tariff": "TOU-GS-2-B",
  "current_annual_cost": 57930.36,
  "recommendations": [
    {
      "tariff_name": "TOU-GS-2-D",
      "utility": "Southern California Edison",
      "estimated_annual_cost": 52140.00,
      "annual_savings": 5790.36,
      "savings_percent": 10.0,
      "notes": "Lower demand charges during summer months"
    },
    {
      "tariff_name": "TOU-GS-2-E",
      "utility": "Southern California Edison",
      "estimated_annual_cost": 54200.00,
      "annual_savings": 3730.36,
      "savings_percent": 6.4,
      "notes": "Better off-peak rates for evening-heavy usage"
    }
  ]
}

Portfolio-Wide Analysis

You can also run savings analysis across an entire portfolio in one call using POST /api/savings/portfolio-analyze with a portfolio_id.


Next Steps

You have completed the core workflow. Here is where to go next:

Goal Guide
Set up tenant billing (RUBS) Tenant Billing Guide
Connect your PMS (Yardi, RealPage, etc.) Propexo Integration
Explore the tariff database Tariff Search Guide
Deploy on Vercel Deployment Guide
Configure environment and API keys Configuration Reference