September 2026
New connectors
Claimlane
Claimlane is now available as an ELT source, syncing 10 tables (27 including subtables) covering retailers, suppliers, B2B and B2C claim tickets, and raw data exports for warranty and returns management.
5 total changes
| Table/column | Change type | Notes |
|---|---|---|
retailer | New table | Full sync. |
supplier | New table | Full sync, with supplier_brand and supplier_brand_product_identification subtables. |
b2b_ticket | New table | Incremental, synced per supplier so a run that fails partway through doesn't replay the suppliers it already finished. Eight subtables cover claim products and their tags and statuses. |
b2c_ticket | New table | Full sync, since a consumer ticket's status, refunds, and shipping lines keep changing after it is created. Nine subtables cover products, refunds, parts, and shipping lines. |
raw_b2b_product_data, raw_b2b_workload_data, raw_b2c_agent_data, raw_b2c_product_data, raw_b2c_product_part_data, raw_b2c_workload_data | New table | One table per Claimlane raw data export type, keyed on a checksum of the row since raw exports have no id. |
Connections authenticate with an API key. Because most endpoints are scoped to a retailer or supplier organization, the connection settings include an organization picker; leaving it empty syncs every organization the key can see.
b2b_ticket needs at least one supplier in reach to sync. Connections that
can only see retailers can still use every other table.
Walmart
Walmart Marketplace is now available as an ELT source, syncing 57 tables covering the catalogue, inventory, orders, returns, feed submissions, pricing, payments, shipping settings, WFS inbound shipments, and listing quality.
Connections authenticate with the Client ID and Client Secret from Seller Center's API Key Management page (Walmart's Direct API integration). Weld exchanges them for a short-lived access token on every run, so there is nothing to re-authorize as long as the key pair stays valid.
Catalogue and inventory
5 total changes
| Table/column | Change type | Notes |
|---|---|---|
item | New table | Full sync of the seller's items, including price, publishing status and variant grouping. The shelf column arrives as a JSON-encoded string from Walmart, so it is stored verbatim. |
item_unpublished_reason | New table | |
item_variant_group_attribute | New table | |
inventory | New table | Multi-node inventory for every SKU and ship node, so no per-SKU lookup is needed. |
inventory_node | New table | Ship node quantities land as *_amount / *_unit column pairs. |
Orders and returns
21 total changes
| Table/column | Change type | Notes |
|---|---|---|
order | New table | Incremental on last modified date. |
order_line | New table | |
order_line_charge | New table | |
order_line_status | New table | |
order_line_refund_charge | New table | |
order_line_serial_number | New table | |
order_payment_type | New table | |
return | New table | Incremental on return last modified date. |
return_order_line | New table | |
return_order_line_charge | New table | |
return_order_line_charge_tax | New table | |
return_order_line_charge_reference | New table | |
return_order_line_charge_total | New table | |
return_order_line_tracking_status | New table | |
return_order_line_refund_channel | New table | Carries refund_covered_by, which is what Walmart actually returns for the refund channel. |
return_order_line_tracking_detail | New table | |
return_order_line_tracking_detail_reference | New table | |
return_line_group | New table | |
return_line_group_line | New table | |
return_line_group_label | New table | |
return_line_group_label_carrier | New table |
Walmart only returns orders created in the last 180 days, so a sync configured with a longer lookback still gets 180 days of order history. Returns have no such limit.
Feeds, pricing and payments
7 total changes
| Table/column | Change type | Notes |
|---|---|---|
feed | New table | Catalogue and price feed submissions, incremental on the feed's modified date. |
feed_item | New table | Per-item ingestion status within the feed file. |
feed_item_ingestion_error | New table | |
pricing_insights | New table | Buy Box win rate, competitor and comparison prices, and repricer settings per SKU. |
price_incentive | New table | Both eligible and enrolled incentives. |
payment_statement_report | New table | The current cycle's payment statement. Appended once per sync rather than replaced, since the snapshot carries no key of its own and Walmart does not return earlier cycles. |
recon_report | New table | Settlement reconciliation files, incremental by settlement date rather than run time, so files Walmart publishes days after the period they cover are not skipped. |
Shipping settings and inbound shipments
18 total changes
| Table/column | Change type | Notes |
|---|---|---|
shipping_template | New table | The template list: name, type, rate model and status. |
shipping_template_details | New table | The full template, fetched only for templates whose modified date moved since the last sync. A template Walmart returns without a modified date is always fetched rather than skipped. |
shipping_template_fulfillment_center | New table | |
shipping_template_method | New table | |
shipping_template_configuration | New table | |
shipping_template_address_type | New table | |
shipping_template_tiered_charge | New table | |
shipping_template_region | New table | |
shipping_template_sub_region | New table | |
shipping_template_state | New table | |
shipping_template_state_subregion | New table | Every ancestor key is repeated at each level, so a state subregion row joins straight back to its template. |
shipping_configuration | New table | The seller's shipping profile. |
shipping_configuration_setting | New table | |
shipping_configuration_category | New table | |
shipping_coverage | New table | Ship node coverage. |
shipping_coverage_area | New table | |
inbound_shipment | New table | WFS inbound shipments. Synced in full on every run rather than incrementally, because Walmart filters only on creation date while a shipment keeps changing status for weeks afterwards. |
inbound_shipment_tracking_number | New table |
Listing quality
6 total changes
| Table/column | Change type | Notes |
|---|---|---|
listing_quality_score | New table | The account-wide listing quality score. Walmart only ever returns today's score, so each sync appends a row instead of replacing the last one, making the table a trend line ordered by _weld_synced. |
listing_quality_item | New table | Per-item listing quality, including GMV, conversion rate and post-purchase issues. |
listing_quality_item_score | New table | The component scores behind the item's overall score. |
listing_quality_item_content_issue | New table | Content and discoverability issues on the listing. |
listing_quality_item_trend | New table | |
listing_quality_item_trend_value | New table | A 30-day daily series per item per statistic. |
payment_statement_report and listing_quality_score append rather than
replace, and both are protected from a full refresh: their history cannot be
re-read from Walmart, so a full sync would throw it away.
Explore Walmart documentation →
QRFY
QRFY is now available as an ELT source, syncing QR codes, folders, and scan analytics from the QR code generator platform.
3 total changes
| Table/column | Change type | Notes |
|---|---|---|
qr | New stream | Includes substreams for the per-type data (one of 22 QR types, e.g. url, vcard, wifi) and the design style, rather than flattening them onto the qr row. |
folder | New stream | |
analytics | New stream | Incremental scan report, deduplicated on scan_url, date, and a few dimensions since rows carry no QR id. |
Connections authenticate with an API key.
New features
Orchestration overview: sorting, contents, and a disabled filter
The orchestration overview now sorts workflows alphabetically, treating leading numbers numerically so "2. Klaviyo Sync" sorts before "10. Shopify Sync" instead of after it. Each workflow's card also gets a line summarizing what it contains, for example how many models, source tables, reverse ETL syncs, and webhooks it runs. A new toggle lets you hide disabled workflows, and only appears once you have at least one disabled workflow to hide.
Capture deletes (Beta)
This feature is in Beta. A table's full syncs can now keep the rows the source stops returning, instead of the sync silently removing them from your destination table. Turn on Capture deletes in the table's settings menu, just above History tables, and rows the source drops on the next full sync are marked with _weld_deleted_at rather than deleted — so they stay queryable for auditing or point-in-time analysis. A row that comes back is unmarked again. See Capture deletes for the full guide.
Only a small set of tables can capture deletes today. The option needs a full sync that reads a complete snapshot of the source, so it appears on only a handful of the tables Weld offers. We are adding support table by table — Google Ads is the first connector to get it.
Within Google Ads, it is the predefined dimension reports (e.g. campaign, ad_group, ad) and their bidding strategy and criterion substreams that qualify, so a full sync marks the entities the account no longer returns instead of dropping the rows. Time-based reports keep reconciling per report window, and custom reports built from your own query are unaffected.
Your data warehouse has to support it too. Capture deletes works on BigQuery, Snowflake, Redshift, Postgres, MSSQL, and MotherDuck.
Configuring syncs programmatically? The same setting is soft_delete_enabled on a stream over the Weld Connect API and the MCP server, and both capabilities are readable before you turn it on: soft_delete_supported per stream from get_elt_sync_available_streams, and the data warehouse's support from GET /data_warehouse or the MCP get_account tool.
No action required. Capture deletes is off by default and only changes behavior on the tables you explicitly turn it on for.
Error markers in the SQL editor
A failed preview now places an error marker on the line the warehouse blamed, right in the SQL editor, instead of only showing its message in the bottom pane. The marker follows the SQL as you keep editing: changing the line it blamed clears the marker, editing elsewhere repositions it, and undoing back to the failing query brings it back.
The marker spans the whole line rather than a single column, since the warehouse counts columns into the SQL Weld actually sent, after Weld's own {{tag}} references have already been substituted.
The editor can now also validate your SQL against the warehouse while you type, marking the offending line before you ever run the query. Validation is debounced to a typing pause and cached by SQL text, and runs the query as a free dry run or EXPLAIN rather than actually executing it. If the SQL is valid, any leftover marker from an earlier failed run is cleared.
Explanations for quarantined syncs
When a sync stream is quarantined, Weld now generates a plain-language explanation of what happened, instead of showing the raw underlying error. The card also lists suggested next steps as controls you can act on directly, such as re-authenticating a connection, adjusting a sync's incremental settings, reducing its sync frequency, or contacting support with the affected table already noted.
When the cause is on Weld's side rather than something in your setup, the card states that no action is needed instead of suggesting self-serve fixes that would not help.
No action required. This is an explanation and UI improvement; existing quarantine detection and retry behavior are unchanged. If an explanation isn't available for a quarantined stream, the raw error is still shown.
Identifier casing for Snowflake
Snowflake resolves an unquoted identifier to its upper-case form, and Weld quotes every name it writes, so a table created as "orders" could only ever be queried quoted. You can now have Weld create schemas, tables and columns in upper case instead:
select id from hubspot.orders
Turn on Create tables and columns in upper case under Advanced when you connect Snowflake, or later on the Data Warehouse settings page, to set the default for new syncs. Individual syncs can override it next to the destination schema name when you create them. Over the API, send identifier_casing on POST /elt_syncs and read or change the default on /data_warehouse.
The casing is fixed when a sync is created and cannot be changed afterwards, because "orders" and "ORDERS" are two different objects in Snowflake. Changing the warehouse default only affects syncs created after the change.
To move an existing sync to upper case, create a new sync with the setting turned on and repoint your models at it.
No action required. The setting is off by default, and existing syncs keep landing names exactly as the source produces them.
Read more about identifier casing →
Connector updates
Recurly: New discount column on invoices
Recurly's invoice table gains a discount column, alongside the existing discounted column.
1 total change
| Table/column | Change type | New name | Notes |
|---|---|---|---|
invoice | |||
column | New Column | discount | |
Recurly: Coupon redemption table
Recurly gains a coupon_redemption table. Since there is no site-level endpoint for redemptions, it is fetched per account and covers both account-level and subscription-level redemptions. A new invoice_coupon_redemption subtable on invoice links each redemption to the invoices it discounted.
2 total changes
| Table/column | Change type | Notes |
|---|---|---|
coupon_redemption | New table | |
invoice | ||
invoice_coupon_redemption | New subtable | Carries the discounted amount for that invoice. |
NetSuite: Five new SuiteAnalytics tables
NetSuite gains five tables from its SuiteQL / SuiteAnalytics schema, which have no REST record behind them. transactionaccountingline carries the GL account and debit/credit per transaction line, which is what a trial balance, P&L, or balance sheet is built from. entity and item are the union tables behind the per-type records (customer, vendor, inventory item, and the rest). accounttype and accountingperiodfiscalcalendars are small reference tables with no modified date, so they sync in full on every run.
5 total changes
| Table/column | Change type | Notes |
|---|---|---|
transactionaccountingline | New table | The GL account and debit/credit per transaction line, needed for a trial balance, P&L, or balance sheet. |
entity | New table | |
item | New table | |
accounttype | New table | Reference table, synced in full on every run. |
accountingperiodfiscalcalendars | New table | Reference table, synced in full on every run. |
QuickBooks: Bill enrichment, linked transactions, and expense line fixes
QuickBooks's bill table now carries its doc_number, private_note, home_balance, exchange_rate, vendor address, and last-modified-by and sales term references. A new bill_linked_txn table syncs the transactions linked to a bill, such as its payment, and both expense line subtables gain their own linked transaction subtable for the same purpose at the line level.
Expense lines also gain a project_ref column, and bill_account_based_expense_line rows now include their amount, which the line's schema previously left out.
13 total changes
| Table/column | Change type | New name | Notes |
|---|---|---|---|
bill | |||
column | New Column | doc_number | |
column | New Column | private_note | |
column | New Column | home_balance | |
column | New Column | exchange_rate | |
column | New Column | vendor_addr | Vendor address fields. |
column | New Column | meta_data_last_modified_by_ref | |
column | New Column | sales_term_ref | |
bill_linked_txn | New table | The transactions linked to a bill, such as its payment. | |
bill_account_based_expense_line | |||
bill_account_based_expense_line_linked_txn | New subtable | ||
column | New Column | amount | |
column | New Column | project_ref | |
bill_item_based_expense_line | |||
bill_item_based_expense_line_linked_txn | New subtable | ||
column | New Column | project_ref | |
QuickBooks: Vendor credit table
QuickBooks now has a vendor_credit table, syncing vendor credits with their account details, tax details, and metadata. Line items sync into vendor_credit_account_based_expense_line and vendor_credit_item_based_expense_line subtables, matching how expense lines are already split for other QuickBooks transaction tables.
3 total changes
| Table/column | Change type | Notes |
|---|---|---|
vendor_credit | New table | |
vendor_credit | ||
vendor_credit_account_based_expense_line | New subtable | Expense lines coded directly to an account. |
vendor_credit_item_based_expense_line | New subtable | Expense lines coded to a product or service item. |
Criteo: Ad sets, campaign IDs on statistics reports, and a wider primary key
Criteo now has an adset table. Ad sets sit between campaigns and ads.
The adset_statistics_daily_report table is new, and the existing ad_statistics_daily_report table now also carries adset_id and campaign_id on every row, so ads, ad sets, and campaigns can all be connected without a join. Requesting these id columns also brings back their names, so all three statistics reports now expose readable campaign, adset, and ad name columns alongside the ids.
5 total changes • 1 possible breaking change
| Table/column | Change type | Notes |
|---|---|---|
adset | New table | Includes a subtable for scheduled budgets. |
adset_statistics_daily_report | New table | |
ad_statistics_daily_report | ||
adset_id, campaign_id, campaign, adset, ad | New Column | Adds the ad set and campaign hierarchy, plus readable names, to each row. |
primary key | Updated | Now ad_id, adset_id, campaign_id, date (previously ad_id, date). |
campaign_statistics_daily_report | ||
campaign | New Column | Readable campaign name alongside campaign_id. |
Traede: Delivery and invoice addresses on orders
The order stream now syncs the delivery and invoice addresses as delivery_* and shop_* columns (12 fields each: name, attention line, address lines, zip, city, region, country, email, telephone, VAT, and EAN). shop is Traede's include name for the invoice address; Weld surfaces it as shop_* to stay true to the API rather than colliding with a real invoice include if Traede ever adds one.
These addresses were previously unavailable: the earlier attempt used include names (addresses, delivery_address) that Traede's supported v10 API rejects with a 422. All fields are nullable, since not every order carries a full address.
2 total changes
| Table/column | Change type | Notes |
|---|---|---|
order | ||
delivery_name, delivery_att, delivery_address, delivery_address_2, delivery_zip, delivery_city, delivery_region, delivery_country, delivery_email, delivery_telephone, delivery_vat, delivery_ean | New Column | Delivery address fields. |
shop_name, shop_att, shop_address, shop_address_2, shop_zip, shop_city, shop_region, shop_country, shop_email, shop_telephone, shop_vat, shop_ean | New Column | Invoice address fields (Traede's shop include). |
No action required. Existing syncs pick up the new columns automatically.
HiBob: Employment history stream, richer employee data, and custom fields
HiBob now has an employee_employment_history stream, syncing every employment change (contract, working pattern, salary type, and similar terms) with its own effective date, instead of only the employee's current employment terms.
The employee stream itself now syncs many more fields: employment terms (contract, type, FTE, weekly hours, salary pay type, FLSA code, working pattern), lifecycle status and termination details, work address, salary, and personal fields such as pronouns and nationality, each alongside HiBob's human-readable version of the value where one exists.
Custom fields, whose ids are tenant-specific (e.g. about.custom.field_1724744461985), now sync as dedicated employee_custom_fields and employee_payroll_custom_column tables keyed by field name instead of being dropped. Employment history entries carry their own custom columns the same way, via employee_employment_history_custom_field.
5 total changes
| Table/column | Change type | Notes |
|---|---|---|
employee_employment_history | New stream | One row per employment change, including contract, working pattern, and salary type. |
employee | Updated | Syncs many more fields: employment terms, lifecycle, work address, salary, and personal fields. |
employee_employment_history | ||
employee_employment_history_custom_field | New stream | |
employee | ||
employee_custom_fields | New stream | |
employee_payroll_custom_column | New stream | |
The time_off stream now also requests up to two years into the future and includes pending requests, so upcoming and pending time off show up alongside approved past and current entries.
Fortnox: Vouchers stream is now incremental
The vouchers stream now syncs incrementally based on each voucher's last modified date, instead of doing a full resync of all financial years on every run. Updates to existing vouchers are picked up without re-reading the full history each time.
1 total change
| Table/column | Change type | Notes |
|---|---|---|
vouchers | Updated | Now syncs incrementally based on last modified date. |
Cargoson: Bookings stream
Cargoson now supports a bookings stream. Instead of paginating Cargoson's booking API, the stream reads the booking references you already hold in a table or view in your data warehouse and resolves each distinct reference against the Cargoson API, including its packages, containers, package units, and ADR (dangerous goods) rows.
5 total changes
| Table/column | Change type | Notes |
|---|---|---|
bookings | New stream | Reads booking references from a warehouse table or view you select in the connection settings. |
bookings | ||
booking_rows | New stream | Packages on the booking. |
booking_containers | New stream | Containers on the booking. |
booking_package_units | New stream | Package units (e.g. SSCC) on the booking. |
booking_rows | ||
booking_row_adr_rows | New stream | ADR (dangerous goods) rows on a package. |
Select the table or view holding your booking references, and the column with the booking id, in the connection settings. Only distinct, non-empty values are looked up.
No action required. The bookings stream is opt-in and existing
services and parcel_machines syncs are unaffected.
Platform
Weld Connect API and MCP server: primary key columns can no longer be excluded
The Weld Connect API and MCP server now reject any stream whose excluded_columns includes one of its primary key columns, the same way the app already does.
GET /elt_syncs/{id}/available_source_streams (and get_elt_sync_available_streams) now also return a primary_keys field so you can see which columns to avoid excluding before adding a stream.
History tables now seed from existing data when enabled
Turning on the history table for a stream that was already syncing previously only captured changes from that point forward. Any row whose last change predated enabling history had no entry in __history at all, and stayed missing until it happened to change again, so a slow-moving table could leave most of its rows absent from history.
__history is now seeded from the current main table the first time it's created, so the full existing dataset is captured immediately instead of waiting on future changes. This also repairs a __history table that was deleted after being created. Supported for BigQuery, Snowflake, Postgres, Redshift, MSSQL, ClickHouse and MotherDuck destinations.
No action required. Seeding happens automatically the next time history is
enabled on a stream, or on a run where the __history table is missing.
ClickHouse: Incremental schema changes
Schema changes on a ClickHouse destination no longer force a full resync of the table. Weld now applies the same schema changes incrementally as it does for other destinations: adding a subschema, adding or removing a field (nullable or required), and changing a field's nullability in either direction.
Type changes still require a full resync, since ClickHouse can only convert between compatible column types and doing so rewrites the whole table.
No action required. Existing syncs pick up incremental schema changes automatically.
Bug fixes
- Fixed Google Drive syncs configured via the API or MCP server (rather than the Weld app's connection form) failing to resolve their folder, which caused
get_elt_sync_available_streamsandadd_elt_sync_source_streamsto return500errors instead of listing or adding streams. The folder is now resolved consistently across stream listing, streaming, and schema generation, and the settings API now offers a list of real Google Drive folders to choose from instead of requiring a folder ID.