SQL Mirror Changelog

Last updated: April 24, 2026

Below is a log of changes to Switchboard's SQL Mirror. For more information about the SQL Mirror, including onboarding information and data reference, see the full collection of SQL Mirror documentation. For any feedback or questions, please  email support@oneswitchboard.com.


April 2026

Couple small changes this month:

  • Added donor_phone to actblue_donations

  • Added count_messages_refunded and count_segments_refunded to charges_daily


March 2026

Added html_content and text_content to the email_blasts table. These columns contain the html or text template associated with an email blast.


February 2026

Big change this month is that we've added charge and credits data to the sql mirror! The two new tables are charges_daily and credits_daily. You can find more information about these tables and everything else in the mirror in the SQL mirror data docs.

Additional changes:

  • Added street_address column to phones and emails tables

  • Added creator column to broadcasts table


December 2025

We have modified the phone_messages table to include incoming messages as well as more types of outbound messages. This change includes:

  1. Adding a column called message_direction to the table

  2. Adding the additional types of outbound and incoming messages

If you have logic that assumes all messages in that table will be outbound broadcast messages (the current contents of the table), please update your tooling to select rows with message_direction equal to outbound and a non-null broadcast_id.

As always, check out the detailed mirror documentation for more information on what columns exist and what they mean.


November 2025

👀 Moving SQL Mirror to views

We are continuing to gradually move all SQL mirrors to the view-based structure! If we have not already migrated yours, you can expect it in the next couple weeks.


October 2025

📝 Improved documentation on email_messages

We added information to the email_messages documentation about the following fields: subject, html_content, text_content. These fields were already available in the mirror but were not previously listed in the documentation.

👀 Moving SQL Mirror to views

In the first few weeks of October, we will be migrating all SQL mirrors to a view-based structure. This will make your SQL mirror data more up-to-date and is part of our ongoing work to improve SQL mirror setup, so you can get your data faster!

It will result in the following changes:

  • Data will be more up-to-date (technical details below)

  • The icon for each table/view will change in the BigQuery interface, indicating that they are views instead of tables

  • The predicted amount of data scanned when querying a view will be significantly larger, but due to the internal structure of the data (see https://cloud.google.com/bigquery/docs/clustered-tables for more info), the actual amount of data scanned when querying your SQL mirror will be only slightly larger. If you are using on-demand pricing, the cost estimates will increase, but the actual costs should not be impacted significantly.

  • There will be a brief period of downtime as we migrate organizations to the new structure. Keep an eye out for additional communications from us about when to expect that for your organization.

Details on data freshness:

The underlying data used for the sql mirrors is updated on an ongoing basis. That data is materialized into base tables once an hour. Previously, there was then a second job that split the base tables into per-org tables. With this change, the per-org data will be views directly from the base tables, so they will be updated as soon as the hourly job is done running, instead of 15-45 minutes later. So data will be no more than an hour delayed usually.

🚨Column removal🚨

We removed the column opt_in_status from the phones table. We recently added a new column called is_opted_out that contains similar information; please migrate to using that column.


September 2025

📈 New Data

We have added information about associated city, state, and zip code to the phones and emails tables.

We have also changed the error code surfaced in phone_messages to use Switchboard maintained error codes. You can find out more about these error codes here.


August 2025

📈 New Data

You can now access data about saved searches and about phone opt out sources.

The new tables are:

  • saved_searches

  • saved_search_result_phones

  • saved_search_result_emails

  • phone_opt_outs

We've also added a new column to the phones table called is_opted_out (more on that below!).

As always, head on over to our SQL mirror documentation to learn more about these new tables.

🐛 Bug Fixes

We recently improved alignment between the phone_messages table and phone_message_actions so that more actions data is available in phone_messages.

Several fields in phone_messages related to delayed message activities are not 100% complete. The most accurate sources for donations and actions data are phone_message_actions and actblue_donations. Read through the docs, including the updated note in phone_messages, for more information.

🔜 Future Plans

🚨Upcoming column removal🚨

At the beginning of October, we will be removing the column opt_in_status from the phones table. We recently added a new column called is_opted_out that contains similar information; please migrate to using that column between now and October.

Some additional details on these two columns:

The existing column, opt_in_status, is a string that contains one of three possible values, opted_out, opted_in, or unknown.

The new column, is_opted_out, is a boolean that is True if a phone has opted out (eg, if it would have the value opted_out in the old column). It does not contain information on if a phone is unknown vs opted in.

Please reach out to us at support@oneswitchboard.com if you have any questions or concerns about this change!