October 2026
Billing and usage
Active rows: subtables now count, and full syncs count each row once a month
From December 1, 2026, two things change in how active rows are counted for existing accounts. New accounts created from October 19, 2026 are counted this way from the start.
Subtables count as active rows. Some connectors write subtables alongside a parent table, for example order_line next to the Shopify order table, or the association tables in HubSpot. Until now only rows in the parent table were counted. Rows in subtables now count the same way as rows in any other table.
Full syncs count each row once a month. On a full sync, each row in the table counts as one monthly active row, however many times the table is resynced that month. Running a full sync daily or on demand no longer adds the whole table to your usage on every run.
Incremental syncs are unchanged. Rows that are new or updated since the last sync count as active rows, as before.
What stays free. These don't count toward your active rows:
- The first 14 days of a new connector. Everything a new connector syncs in its first 14 days is free.
- The first sync of a new table, which loads its history.
- Resyncs Weld runs itself, for example after a schema change.
- Backfills on request. To reload historical data for a table you already sync, ask us in the support chat in the Weld app and we'll run the backfill free of charge. Full syncs you trigger yourself count once a month, like any other full sync.
No action required. Depending on your setup, your active row usage can go up or down from December 1. You can follow it per connector and table on the Usage page in the Weld app.
New connectors
Sprout Social
Sprout Social is now available as a Weld ELT source, syncing six tables behind API token auth: cases, message, profile, tag, group, and user.
6 total changes
| Table/column | Change type | Notes |
|---|---|---|
cases | New table | Incremental on updated_time, read in one-week windows. |
message | New table | Incremental on created_time, read per group. |
profile | New table | Full reload every run. |
tag | New table | Full reload every run. |
group | New table | Full reload every run. |
user | New table | Full reload every run. |
Connections authenticate with an API token, generated under Settings > Global Features > API > API Token Management in Sprout Social. Requests share a rate limit of 60 a minute per connection.
A profile that belongs to several groups can have its messages synced once per
group, and a case updated right at a sync window boundary can be synced twice,
so a cases or message row may occasionally appear more than once.
Sona
Explore Sona documentation → ·
Sona is now available as a Weld ELT source.
Databricks
Databricks Unity Catalog is now available as a Weld ELT source in addition to a destination. The ELT settings offer a catalog picker, and tables are named catalog.schema.table and include views, so dbt's default view models show up alongside regular tables. A Unity Catalog volume is optional on the connection: it's only needed for the destination, which stages files through it.
Incremental syncs use a pointer column you choose, merging rows when the table has a primary key and appending otherwise, the same model as the Snowflake source. Nested types (ARRAY, MAP, STRUCT, VARIANT) land as JSON strings, DECIMAL becomes a double, BIGINT becomes a long, and TIMESTAMP, TIMESTAMP_NTZ, and DATE all arrive as UTC timestamps.
Cloud Fetch is off, so large results page through the warehouse instead of
downloading from cloud storage, which is slower for very large tables.
DECIMAL and BIGINT values above 2^53 lose precision, and a nested value
over 65,535 bytes fails to load into Redshift.
PagerDuty
PagerDuty is now available as a Weld ELT source, syncing incidents, services, escalation policies, schedules, on-calls, teams, users, change events, audit logs, and incident analytics from the PagerDuty incident management platform.
34 total changes
| Table/column | Change type | Notes |
|---|---|---|
addon | New table | |
analytics_metric_service_daily | New table | Per-service daily incident analytics metrics. |
audit_log | New table | Incremental. Includes substreams of actors and changed field/reference details. |
business_service | New table | |
business_service_subscriber | New table | |
change_event | New table | Incremental. Includes substreams of affected services, links, and custom details. |
escalation_policy | New table | Includes substreams of rules (with their targets), services, and teams. |
event_orchestration | New table | |
extension | New table | Includes a substream of extension objects. |
extension_schema | New table | Includes a substream of send types. |
incident | New table | Incremental. Includes substreams of assignments, acknowledgements, responders, pending actions, and teams. |
incident_custom_field_value | New table | Incremental. |
incident_note | New table | Incremental. |
incident_workflow | New table | Includes substreams of teams and steps, with each step's actions and their inputs/outputs. |
license | New table | Includes a substream of valid roles. |
log_entry | New table | Incremental. Includes substreams of teams and assignees. |
maintenance_window | New table | Includes substreams of services and teams. |
notification | New table | Incremental. |
on_call | New table | |
paused_incident_reporting_alert | New table | Incremental. Includes substreams of triggered and resolved alerts. |
raw_incident | New table | Incremental. Per-user incident analytics. |
ruleset | New table | |
schedule | New table | Incremental. Includes substreams of users, escalation policies, and teams. |
service | New table | Includes substreams of teams, integrations, support hours, and scheduled actions. |
slack_dedicated_channel | New table | Incremental. |
tags | New table | |
tag_entity | New table | |
team | New table | |
template | New table | Incremental. |
user | New table | Includes substreams of contact methods, notification rules, and teams. |
user_delegation | New table | |
user_handoff_notification_rule | New table | |
user_notification_subscription | New table | |
vendor | New table |
Connections authenticate with a REST API key, created under Integrations > API Access Keys in PagerDuty.
Google Cloud Storage
Explore Google Cloud Storage documentation → ·
Google Cloud Storage is now available as a Weld ELT source, syncing files from a bucket with the same file types and settings as the AWS S3 source.
There are two ways to connect:
- Upload your own service account key (the default). Weld checks the key by listing the bucket before saving the connection.
- Grant access to a Weld service account. Weld creates a service account for your workspace and uses it for every Google Cloud Storage connection you add. Weld shows the service account's email in the sync settings, so you can grant it
Storage Object Vieweron the bucket.
New destinations
Apache Iceberg
Apache Iceberg is now available as a Weld ELT destination. Weld writes Iceberg tables through any Iceberg REST catalog, including Amazon S3 Tables and AWS Glue, as well as Polaris, Snowflake Open Catalog, Lakekeeper, Nessie, Cloudflare R2 Data Catalog, and BigLake. Iceberg is write-only in Weld: it's available as an ELT destination, not as a data source or data warehouse.
New features
Turn off raw views
Accounts that model their synced tables outside Weld can now turn off raw views, saving warehouse load and avoiding sync failures that view creation can cause.
- Warehouse setup. A Create raw views toggle, on by default, appears in the Advanced section when configuring a data warehouse.
- Warehouse settings. A matching Raw views toggle lets an existing account turn views off later. Turning it off leaves existing views in place but stops updating them; turning it back on recreates each view the next time its table syncs.
Both toggles only appear for integrations that support raw views, so Iceberg, S3, and Databricks don't show them.
Model clean-up: GitHub-tracked models stay out of deletes
In GitHub mode, a model with a sourcePath can only be deleted in the repo, so the Model clean-up list no longer offers a delete that would fail. An unused row for a tracked model shows a GitHub icon in place of the checkbox, with a line under its name naming the file to delete to remove it. Select-all skips those rows, and a tracked model can never be part of a delete. A used row for a tracked model gets the same GitHub icon as in the editor sidebar. The Review with AI prompt gains a GitHub file column for tracked models and tells the assistant to delete those files in the repo instead. Models no repo file tracks stay selectable and deletable as before.
A more capable Ed
Ed, the AI assistant in the model editor, has been rebuilt as an agent. It now works through the same tools as the Weld MCP server, so instead of answering from a snapshot of the schema it can look things up as it goes:
- Find the right data. Ed searches your synced tables and existing models and reads their columns, so it writes queries against what is actually in your warehouse.
- Check its own SQL. Before suggesting a query, Ed validates it against your warehouse and fixes any errors it finds, so suggestions run the first time.
- Look at the results. When it needs to, Ed runs read-only queries to check the data, for example to see which values a column holds. It never changes data in your warehouse.
- Apply and undo. A suggested query can be applied to the open tab in one click and undone just as easily. Fix with Ed on a failed query sends the error straight to Ed.
- Pick up where you left off. Conversations are saved, so you can come back to one later.
You can also start from an empty model editor: ask "What do you want to query?" or pick Explore with Ed next to one of your synced sources, and Ed opens a new draft and gets going.
Ed is available to users with permission to run queries.
Overview: a new landing page for your workspace
The new Overview page is now the first thing you see when you open Weld. It answers two questions at a glance: what needs my attention, and what has happened since I was last here.
- Needs attention. Failing syncs, locked tables, and connections that need to be reauthorized are listed at the top, each linking straight to the thing that needs fixing. When everything is healthy, the page says so.
- What's new since your last visit. An activity feed shows what changed across the workspace, with everything new since you last looked marked as such: data sources and tables added, models created, changed, or published, orchestrations and their runs, connections set up or changed, and more. Each entry shows who made the change, and model changes can be opened as a diff.
- Filter the feed by area or by person to find a specific change.
- Getting started. New workspaces see a short checklist on the Overview that walks them through connecting a first data source and modeling their data.
The previous Activity page now redirects to the Overview.
Model clean-up: find unused models in BigQuery and Snowflake
BigQuery and Snowflake workspaces can now find published models that no warehouse query has read in 90 days. A new Model clean-up card (next to the BigQuery usage card on BigQuery, above the connection form on Snowflake) has a Find unused models button that opens a modal listing each unused model with a link to its editor and folder, its table or view type, last read time, and warehouse path.
A model counts as unused when its table or view was last read more than 90 days ago, or not at all within the warehouse's history window (180 days on BigQuery, 365 on Snowflake). A model also counts as used when a model that depends on it is used, at any depth, since Snowflake's access history never lists a view read only through another view. An Unused / In use toggle shows why each used model is kept, for example read recently, created recently, or used by a named dependent.
The modal can copy the unused list, or copy an AI review prompt built for the Weld MCP server that an assistant can use to double-check a model before anything is deleted. Deleting one or several models runs through the existing model removal flow, in dependency order. The analysis is cached for a day per workspace, since every run is billed to the customer's warehouse; the modal shows when it last ran and offers a manual Re-run. On Snowflake without Enterprise Edition, the result comes from a query-text fallback and the modal notes that it's approximate.
Beta. Model clean-up is being rolled out gradually to BigQuery and Snowflake workspaces.
Bulk pause, resume, and delete for data source and Reverse ETL syncs
You can now select multiple syncs in the data source and Reverse ETL syncs lists and pause, resume, or delete them together, instead of one at a time. Delete shows a confirmation listing the selected syncs and which of them are active. For data source syncs, it also lets you choose whether to remove the tables those syncs produced from the Model tool, the same checkbox offered on a single-sync delete.
In the Reverse ETL list, select rows with the checkboxes (the header checkbox selects the current page), then use the Actions menu that replaces the "Add Reverse ETL Sync" button while rows are selected. Pause applies to the selected active syncs and resume to the selected paused or never-started ones; both are reversible and have no confirmation dialog, the same as the single-sync row menu. Any filter or search change clears the selection immediately, so rows a filter hides are never acted on. Checkboxes only appear for users with permission to update or delete Reverse ETL syncs.
Notifications in the Weld Connect API and MCP server
The Weld Connect API can now list, fetch, and remove an account's notifications:
GET /notifications: active notifications for the account, newest first, pagedGET /notifications/{id}DELETE /notifications/{id}: removes the notification
The MCP server gets matching tools: list_notifications and get_notification for viewers and up, and remove_notification for editors and admins. Removing a notification that's locking a table lifts the lock, the same as dismissing it in the app.
Notifications for a quarantined sync now also include an explanation of what went wrong and what to do about it, the same explanation shown in the app.
MCP server: Exclude sub-tables and see which are retired
add_elt_sync_source_streams in the MCP server now takes an excluded_substreams list for each table, so an AI assistant can exclude a sub-table (for example HubSpot's deal_company) instead of only being able to migrate models off it. The list replaces the table's current exclusions, except retired sub-tables that are already excluded: they stay excluded since they're no longer offered. Leaving the field out keeps the exclusions unchanged.
get_elt_sync_available_streams now also returns retired_sub_streams for each table: the sub-tables the ELT sync still syncs that are retired, with the sub-table that replaces each one. This is additive, sub_streams is unchanged.
Also fixed a bug where updating an existing table without excluded_substreams could silently replace its exclusions instead of leaving them unchanged.
MCP server: Create a connection
Added a create_connection tool to the MCP server that mints an authorization link for setting up a new connection to an integration from list_integrations. An AI assistant can hand you the link to open in a browser; the connection doesn't exist until you finish it. The label becomes the connection name and must not match an existing connection or another open link.
Connector updates
Gorgias: voice_call and voice_call_event tables
Gorgias now has voice_call and voice_call_event tables, syncing phone call data for reporting on unanswered call rate, average wait time, and SLA percentage. voice_call holds each call's outcome, wait time, and duration; voice_call_event holds the per-call events, such as phone-call-enqueued and phone-call-answered.
2 total changes
| Table/column | Change type | Notes |
|---|---|---|
voice_call | New table | Phone call outcome, wait time, and duration. |
voice_call_event | New table | Per-call phone events, e.g. answered or enqueued. |
NetSuite: custom fields on transaction and transactionline
The transaction and transactionline tables now sync each account's custom fields: custbody_* fields on transaction, custcol_* fields on transactionline, and custom segments (cseg_*) on both. Weld looks up the fields and segments the account actually has and adds them as columns, instead of every account syncing the same fixed column list.
SendGrid: legacy_recipient table
SendGrid now has a legacy_recipient table, reading /v3/contactdb/recipients, the entire Legacy Marketing Campaigns contact database. Previously legacy_list_recipient and legacy_segment_recipient only covered recipients that were on a list or segment, so a recipient that was in neither never appeared in any table. Each recipient's custom fields are unwrapped into a legacy_recipient_custom_field subtable keyed by recipient_id.
2 total changes
| Table/column | Change type | Notes |
|---|---|---|
legacy_recipient | New table | All legacy contactdb recipients, including those not on any list. |
legacy_recipient | ||
legacy_recipient_custom_field | New subtable | Custom field values, keyed by recipient_id. |
Databricks: one connection form per cloud
The Databricks connection form, used for both the source and the destination, is now one form each for AWS, Azure, and GCP instead of a single form with a cloud dropdown. Each form shows that cloud's hostname format, and the driver always authenticates with Databricks OAuth, including on Azure, where the client secret must be a Databricks OAuth secret rather than a Microsoft Entra ID client secret.
Existing connections open in the AWS form and are marked legacy. Re-saving one checks that its hostname actually belongs to AWS.
Facebook Ads: monthly_cumulative_reach_by_country table
New standard table monthly_cumulative_reach_by_country, adding a country breakdown to monthly_cumulative_reach. For every start month and each closed end month after it, each row holds the deduplicated reach, impressions, frequency, and spend for that window, per country. Rows are keyed on account_id, date_start, date_stop, and country.
Since Meta omits reach for queries with breakdowns whose window opens more than 13 months back, no window on this table opens further than that, so start months are capped to the trailing 13 months and the oldest one stops getting new end months once the cap moves past it. Data already loaded for a start month stays.
1 total change
| Table/column | Change type | Notes |
|---|---|---|
monthly_cumulative_reach_by_country | New table | monthly_cumulative_reach broken down by country, capped to windows opening within the last 13 months. |
Grin: contact_tag is now a subtable of contact
contact requests to Grin now send expand=tags, so each contact's tags come back inline. The contact_tag table syncs as a subtable of contact with a contact_id foreign key, giving each tag its contact relationship. The standalone contact_tag table synced from Grin's tags endpoint no longer syncs, since it returned the tag catalog with no link to a contact.
Breaking: If contact_tag was already enabled as its own table, its syncs
now fail. Re-enable contact_tag under contact to resume syncing it as a
subtable.
2 total changes • 1 possible breaking change
| Table/column | Change type | Notes |
|---|---|---|
contact | ||
contact_tag | New subtable | Includes a contact_id foreign key. Replaces the standalone contact_tag table. |
contact_tag (standalone) | Deprecated | No longer syncs. Use the contact_tag subtable of contact instead. |
GoHighLevel: pipeline_stage table
The pipeline table now has a pipeline_stage subtable, unwrapping each pipeline's stages array into its own rows. Stage names, counts, win probabilities, and colors all vary by location and pipeline, but every stage returns the same properties, so opportunity.pipeline_stage_id and contact.pipeline_stage_id can now join directly to a stage's name, color, and stage_win_probability instead of only through pipeline's stringified stages column. That column is unchanged, so existing models keep working.
1 total change
| Table/column | Change type | Notes |
|---|---|---|
pipeline | ||
pipeline_stage | New subtable | Includes name, position, show_in_funnel, show_in_pie_chart, stage_win_probability, color, and origin_id. |
Microsoft SQL Server: Capture deletes on every table
Every table synced from Microsoft SQL Server, SQL Server on RDS, and Azure SQL Database can now use Capture deletes: a full sync marks rows the source no longer returns with _weld_deleted_at instead of dropping them. The table needs primary keys, either from the source or set by you in Weld; turning it on for a table without any is rejected.
Microsoft Dynamics 365 via MSSQL isn't included. Dataverse filters rows by the connection's security role and stops queries at a fixed timeout, so a missing row isn't necessarily a deleted one, and a sync with Capture deletes turned on fails.
No action required. Capture deletes stays off until you turn it on for a table.
For the most accurate results, turn on READ_COMMITTED_SNAPSHOT on the
database. Without it, Weld reads with NOLOCK, which can skip a row being
moved by a concurrent write, so that row could be marked deleted until the
next full sync picks it up again.
Traede: Capture deletes on category, customer, product, variant, order, invoice, production_order, and production_order_delivery_note
These tables can now use Capture deletes; the user table isn't included.
Each table's subtables also gain a new nullable <entity>_updated_at column, copied from the parent row's updated_at (for example product_updated_at on product_variant and product_meta). It's added for every customer, not only those with Capture deletes turned on, and main tables are unchanged.
No action required. Capture deletes stays off until you turn it on for a table.
6 total changes
| Table/column | Change type | New name | Notes |
|---|---|---|---|
product | |||
column | New Column | product_updated_at | Added to product_variant, variant_cost_price, product_category, product_meta, and product_cost_price_set. |
variant | |||
column | New Column | variant_updated_at | Added to variant_attribute, variant_meta, variant_price, variant_available, and variant_stock. |
order | |||
column | New Column | order_updated_at | Added to order_meta, order_line, and order_line_meta. |
invoice | |||
column | New Column | invoice_updated_at | Added to invoice_meta, invoice_line, and invoice_line_meta. |
production_order | |||
column | New Column | production_order_updated_at | Added to production_order_meta and production_order_line. |
production_order_delivery_note | |||
column | New Column | production_order_delivery_note_updated_at | Added to production_order_delivery_note_meta and production_order_delivery_note_line. |
MotherDuck: more accurate column types
MotherDuck now types nullable timestamp, double, and long columns correctly on new tables and new columns, instead of creating them as VARCHAR text. Existing columns keep the type they were created with, so already-synced tables aren't affected.
HubSpot: course table
HubSpot now has a course table, syncing HubSpot's Courses object along with its company, contact, deal, engagement, and ticket associations in a course_association subtable. The table is only selectable once the Courses object has been activated in the connected HubSpot portal.
2 total changes
| Table/column | Change type | Notes |
|---|---|---|
course | New table | |
course | ||
course_association | New subtable | Links a course to its associated companies, contacts, deals, engagements, and tickets. |
Platform
Views over a changed model rebuild automatically
On Snowflake, Postgres, MSSQL, ClickHouse, and MotherDuck, a SELECT * view fixes its column list when it's created, so when the model it reads changes its columns, the view fails every query until it's rebuilt. Weld now rebuilds those views automatically whenever the underlying model changes, whether the change comes from a GitHub sync, the editor, an OpenAPI or MCP publish, a rematerialize, or a scheduled table run. On Snowflake, rebuilding a view also keeps the grants your BI tools depend on.
Bug fixes
- Fixed the model editor's mobile column being pushed wider than the screen by the tab strip, which clipped the editor's right edge and the + tab button.
Shopify: product metafield changes are no longer missed
Shopify's product_metafield table only read metafields for products whose updated_at moved since the last run. Writing a metafield doesn't bump the product's updated_at, so a changed metafield value could go stale in the warehouse until the product was re-read for another reason, and sometimes not even then. The table now reads every product's metafields on every run; only metafields that actually changed are written. Affected tables need one full sync after this change to pick up value changes that were missed before it.