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.
- In HubSpot, go to Development → Keys → Service Keys.
- Click Create service key and name it (e.g. "SawStream").
- Enable at least one CRM read scope. Suggested minimum:
crm.objects.contacts.read+crm.schemas.contacts.readcrm.objects.companies.read+crm.schemas.companies.readcrm.objects.deals.read+crm.schemas.deals.read
Service Keys don't have the
oauthscope — SawStream verifies via a CRM read endpoint, so any one of the above works. - Click Create and copy the Service Key.
- In HubSpot, go to Settings → Integrations → Private Apps.
- Click Create a private app, name it, switch to Scopes.
- Enable the same CRM read scopes as above. The
oauthscope is optional (gives SawStream portal-name display). - Click Create app and copy the Personal Access Key.
- Go to HubSpot in the sidebar of your SawStream admin.
- Paste the key (Service Key or PAT) into the textarea.
- Click Save & Connect.
- SawStream verifies the key by trying read endpoints until one succeeds. On success, the page reloads showing Connected.
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).
- Click + New Query and pick HubSpot as the platform.
- Give the query a name. This is just for your reference.
- Pick an Object from the dropdown — contacts, companies, deals, tickets, or any custom object exposed by your scopes.
- Add the Properties you want to display. Click the property list to search by name or label.
- Choose a Layout. See the Layouts section.
- Set Per Page for pagination, or leave blank to show all records.
- Use the Filter field to narrow results. See the filter syntax notes below.
- If you want a search bar on the embed, turn on Enable Search Bar and pick which properties to search.
- To make each record clickable, fill in Detail Link Template. Use
{!propertyname}placeholders, e.g.https://example.com/contact?id={!hs_object_id}. - Click Save Query.
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.
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.
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.
Standard data table with column headers, sortable by clicking, and a sticky first column on narrow screens.
Each record becomes a card — first property is the title, remaining properties show as label/value pairs.
Tighter 3-column layout. Header band with the record name plus compact label/value rows.
Filter sidebar (search, checkboxes, range sliders) auto-built from your properties, with matching records on the right.
FullCalendar month/week/list views. Pick a date property for the start, a title property, and optionally an end date.
You write a template; SawStream renders it per record. Use {!property} placeholders.
Stable JSON URL — fetch it from any frontend, mobile app, or workflow.
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>.
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>
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.
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.
Your account
Click the lock icon in the sidebar footer. New passwords must be at least 10 characters, include a number, and include a symbol.
Click Log out in the sidebar footer.