SawStream for HubSpot

SawStream lets you display live HubSpot data on any website — no backend code required. Connect your portal once, build a query over contacts, companies, deals, tickets, or any custom object, pick a layout (table, cards, calendar, JSON, CSV, etc.), and paste a small embed snippet. Every page load fetches fresh data from HubSpot.

Signing in

The admin login page is at /login. Enter your email and password and click Log in.

Contact [email protected] if you have any issues signing in.

HubSpot setup

SawStream connects to HubSpot with a single key — either the newer Service Key (Beta, tied to a Service Account so it doesn't break when team members leave) or a classic Private App Personal Access Key. The paste-and-save flow is identical for both.

Recommended: Service Key (Beta)
  1. In HubSpot, go to Development → Keys → Service Keys.
  2. Click Create service key and name it (e.g. "SawStream").
  3. Enable at least one CRM read scope. Suggested minimum:
    • crm.objects.contacts.read + crm.schemas.contacts.read
    • crm.objects.companies.read + crm.schemas.companies.read
    • crm.objects.deals.read + crm.schemas.deals.read

    Service Keys don't have the oauth scope — SawStream verifies via a CRM read endpoint, so any one of the above works.

  4. Click Create and copy the Service Key.
Alternative: Private App Personal Access Key
  1. In HubSpot, go to Settings → Integrations → Private Apps.
  2. Click Create a private app, name it, switch to Scopes.
  3. Enable the same CRM read scopes as above. The oauth scope is optional (gives SawStream portal-name display).
  4. Click Create app and copy the Personal Access Key.
Connect in SawStream
  1. Go to HubSpot in the sidebar of your SawStream admin.
  2. Paste the key (Service Key or PAT) into the textarea.
  3. Click Save & Connect.
  4. SawStream verifies the key by trying read endpoints until one succeeds. On success, the page reloads showing Connected.
A key has the union of all scopes you enabled. As a security best practice, enable only the scopes for the objects you actually plan to embed.
To rotate, paste a new key on the HubSpot settings page and click Replace Key. To remove the connection entirely, click Disconnect.

Queries

A query defines what HubSpot data to fetch and how to display it. Each query gets its own embed code (or URL for JSON/CSV).

Creating a query
  1. Click + New Query and pick HubSpot as the platform.
  2. Give the query a name. This is just for your reference.
  3. Pick an Object from the dropdown — contacts, companies, deals, tickets, or any custom object exposed by your scopes.
  4. Add the Properties you want to display. Click the property list to search by name or label.
  5. Choose a Layout. See the Layouts section.
  6. Set Per Page for pagination, or leave blank to show all records.
  7. Use the Filter field to narrow results. See the filter syntax notes below.
  8. If you want a search bar on the embed, turn on Enable Search Bar and pick which properties to search.
  9. To make each record clickable, fill in Detail Link Template. Use {!propertyname} placeholders, e.g. https://example.com/contact?id={!hs_object_id}.
  10. Click Save Query.
Filter syntax

The Filter field accepts simple property comparisons. The exact set of operators depends on HubSpot's CRM Search API (EQ, NEQ, GT, GTE, LT, LTE, CONTAINS_TOKEN, HAS_PROPERTY, IN, etc.). A few common patterns:

  • lifecyclestage = 'customer' — single-value match.
  • hs_lead_status IN ('NEW','OPEN') — list match.
  • createdate > '2026-01-01' — date comparison.
  • email CONTAINS_TOKEN 'example.com' — substring match on tokenized fields.
Data freshness

The Data Freshness slider controls caching. Live Data refetches on every page load. The 15-minute / 1-hour / 6-hour / 12-hour options cache results, reducing HubSpot daily-call usage. Settable per query.

Editing, copying, deleting

From the Queries page: Edit opens the editor, Copy Code copies the snippet, Delete removes the query (type DELETE to confirm).

Layouts

Each query has a layout that controls how the data appears on your site.

Table

Standard data table with column headers, sortable by clicking, and a sticky first column on narrow screens.

Cards

Each record becomes a card — first property is the title, remaining properties show as label/value pairs.

Grid

Tighter 3-column layout. Header band with the record name plus compact label/value rows.

Sidebar

Filter sidebar (search, checkboxes, range sliders) auto-built from your properties, with matching records on the right.

Calendar

FullCalendar month/week/list views. Pick a date property for the start, a title property, and optionally an end date.

Custom HTML

You write a template; SawStream renders it per record. Use {!property} placeholders.

JSON

Stable JSON URL — fetch it from any frontend, mobile app, or workflow.

CSV Download

A URL that triggers a CSV file download. Wire it to a Download button on your site.

Embedding on your site

Once you have a query, go to its detail page to get the embed code:

<div class="sawstream-section"></div>
<script src="https://sawstream.com/e/tenant/live.js?q=abcdedquerycodexyz" async></script>

Paste both lines into your website where you want the data to appear. The script tag can go anywhere on the page, including the <head>.

Targeting a specific element

By default the widget renders inside the nearest .sawstream-section div above the script. For more control, add a data-target:

<script src="https://sawstream.com/e/tenant/live.js?q=abcdedquerycodexyz"
  data-target="#my-custom-div" async></script>
JSON and CSV links

For JSON and CSV queries you'll see a plain URL instead of a snippet. The JSON URL returns data as an array of objects; the CSV URL triggers a file download.

Settings

Go to Settings in the sidebar to manage allowed origins for your embeds.

Allowed Origins

A list of domains allowed to load your embed and call the query API. Enter one domain per line, e.g. https://mysite.com. Only requests from those origins are served. Settable globally or per-query.

Leaving allowed origins blank in production means anyone can embed your query on their site.

Your account

Changing your password

Click the lock icon in the sidebar footer. New passwords must be at least 10 characters, include a number, and include a symbol.

Logging out

Click Log out in the sidebar footer.