General
Data Sources | General
Connections
Data Sources | Connections
Fields & Formulas
Data Sources | Fields & Formulas
Creating & Sharing
Reports | Creating & Sharing
Report Editing
Reports | Editing
Report Config
Reports | Report Config
Chart Cards
Reports | Chart Cards
Content Cards
Reports | Content Cards
General
Data Chat | General
General
AI | General
General
KPI Forecasting | General
Settings & Status
KPI Forecasting | Settings & Status
Seasonality
KPI Forecasting | Seasonality
Metrics by Source
KPI Forecasting | Metrics by Source
General
Budget Tracking | General
General
Anomaly Detection | General
General
Automation Jobs | General
Change History
Automation Jobs | Change History
URL & Page Checkers
Automation Jobs | URL & Page Checkers
Local & Reviews
Automation Jobs | Local & Reviews
Search Console
Automation Jobs | Search Console
Managing Insights
Insights | Managing Insights
Change History
Insights | Change History
URL & Page
Insights | URL & Page
Local & Reviews
Insights | Local & Reviews
Other Insight Types
Insights | Other Insight Types
General
Local Listings | General
Profiles & Content
Local Listings | Profiles & Content
Performance & Activity
Local Listings | Performance & Activity
Media
Local Listings | Media
Categories & Services
Local Listings | Categories & Services
General
Reviews | General
General
Social Posts | General
Creating Posts
Social Posts | Creating Posts
Managing Posts
Social Posts | Managing Posts
Pipelines
Data Warehouse | Pipelines
Access & Credits
Data Warehouse | Access & Credits
Source Fields
Data Warehouse | Source Fields
Data Studio
Data Warehouse | Data Studio
BigQuery
Data Warehouse | BigQuery
General
Clients | General
General
Integrations | General
MCP
Integrations | MCP
Webhook — Automation Payloads
Integrations | Webhook — Automation Payloads
Webhook — Local & Reviews
Integrations | Webhook — Local & Reviews
Webhook — Other
Integrations | Webhook — Other
Account & Billing
Settings | Account & Billing
Users
Settings | Users
Comments & Notes
Settings | Comments & Notes
Notifications
Settings | Notifications
FAQ
Settings | FAQ
Other
Settings | Other
Settings | Account & Billing
Insights | Managing Insights
Integrations | General
Settings | Comments & Notes
Settings | Users
Reports | Creating & Sharing
AI | General
AI | General
Reports | Content Cards
Anomaly Detection | General
Anomaly Detection | General
Anomaly Detection | General
Insights | Other Insight Types
Anomaly Detection | General
Integrations | Webhook — Other
Anomaly Detection | General
Local Listings | General
Reviews | General
Reports | Chart Cards
Local Listings | Profiles & Content
Data Warehouse | Pipelines
Integrations | Webhook — Automation Payloads
Integrations | Webhook — Automation Payloads
Integrations | Webhook — Automation Payloads
Integrations | Webhook — Automation Payloads
Integrations | Webhook — Local & Reviews
Integrations | Webhook — Automation Payloads
Integrations | Webhook — Local & Reviews
Integrations | Webhook — Local & Reviews
Integrations | Webhook — Local & Reviews
Integrations | Webhook — Automation Payloads
Automation Jobs | General
Automation Jobs | General
Integrations | Webhook — Automation Payloads
Integrations | Webhook — Automation Payloads
Integrations | Webhook — Automation Payloads
Automation Jobs | General
Integrations | Webhook — Automation Payloads
Integrations | Webhook — Automation Payloads
Insights | Managing Insights
Reports | Chart Cards
Budget Tracking | General
Budget Tracking | General
Budget Tracking | General
Budget Tracking | General
Budget Tracking | General
Budget Tracking | General
Integrations | Webhook — Other
Budget Tracking | General
Budget Tracking | General
Local Listings | General
Local Listings | Media
Social Posts | General
Settings | Account & Billing
Reports | Editing
Reports | Creating & Sharing
Local Listings | Categories & Services
Local Listings | Categories & Services
Local Listings | Categories & Services
Settings | Users
Settings | Other
Clients | General
Clients | General
Reports | Chart Cards
Settings | Notifications
Data Sources | General
Integrations | General
Integrations | General
Integrations | MCP
Data Sources | Connections
Data Sources | Connections
Local Listings | Media
Data Warehouse | Data Studio
Data Warehouse | Data Studio
Data Warehouse | Data Studio
KPI Forecasting | General
Reports | Creating & Sharing
Reports | Report Config
Reports | Creating & Sharing
Clients | General
Data Warehouse | Data Studio
KPI Forecasting | General
Data Warehouse | Pipelines
Data Warehouse | BigQuery
Social Posts | Creating Posts
Automation Jobs | General
Social Posts | Creating Posts
Anomaly Detection | General
Automation Jobs | General
Reports | Editing
Data Sources | General
Data Sources | General
Data Sources | General
Data Warehouse | Data Studio
Data Warehouse | Access & Credits
Data Warehouse | Access & Credits
Data Warehouse | Access & Credits
Clients | General
Settings | Users
Settings | Comments & Notes
Data Sources | General
AI | General
Reports | Chart Cards
Social Posts | Managing Posts
Social Posts | Creating Posts
Data Warehouse | Data Studio
Settings | Notifications
Data Warehouse | Pipelines
Settings | Comments & Notes
Settings | Notifications
Settings | Notifications
Social Posts | Managing Posts
Data Warehouse | Pipelines
KPI Forecasting | Metrics by Source
Automation Jobs | URL & Page Checkers
Insights | URL & Page
Data Warehouse | Source Fields
KPI Forecasting | Metrics by Source
Reviews | General
Reports | Report Config
Reports | Report Config
Data Sources | General
Data Sources | Fields & Formulas
Data Warehouse | Source Fields
Settings | FAQ
Settings | FAQ
Data Sources | Connections
Data Sources | Connections
Automation Jobs | Change History
Insights | Change History
KPI Forecasting | Metrics by Source
Automation Jobs | URL & Page Checkers
Insights | URL & Page
Automation Jobs | Change History
Insights | Change History
KPI Forecasting | Metrics by Source
Data Warehouse | BigQuery
Automation Jobs | Change History
Insights | Change History
KPI Forecasting | Metrics by Source
Data Warehouse | Source Fields
Automation Jobs | Local & Reviews
Insights | Local & Reviews
Automation Jobs | Local & Reviews
Insights | Local & Reviews
Automation Jobs | Local & Reviews
Insights | Local & Reviews
Data Warehouse | Source Fields
Data Sources | Connections
Data Sources | Connections
Automation Jobs | Change History
Insights | Change History
Automation Jobs | Local & Reviews
Insights | Local & Reviews
Data Warehouse | Source Fields
Data Warehouse | Source Fields
Budget Tracking | General
KPI Forecasting | Settings & Status
Data Warehouse | Data Studio
Data Chat | General
Settings | Comments & Notes
Local Listings | Profiles & Content
Settings | Other
Settings | FAQ
Reports | Content Cards
Reports | Content Cards
Local Listings | Media
Insights | Managing Insights
Insights | Managing Insights
Integrations | General
Integrations | MCP
KPI Forecasting | Settings & Status
KPI Forecasting | Settings & Status
KPI Forecasting | General
Integrations | Webhook — Other
KPI Forecasting | Settings & Status
Insights | Other Insight Types
KPI Forecasting | General
KPI Forecasting | Seasonality
KPI Forecasting | Settings & Status
KPI Forecasting | Seasonality
Reports | Chart Cards
Local Listings | Performance & Activity
Local Listings | Performance & Activity
Local Listings | Profiles & Content
Local Listings | Media
Integrations | MCP
Data Warehouse | BigQuery
Data Warehouse | BigQuery
Data Warehouse | Data Studio
Settings | Other
Data Chat | General
Local Listings | Media
Local Listings | Media
Local Listings | Media
Social Posts | General
Local Listings | Media
Local Listings | Media
Data Chat | General
KPI Forecasting | Metrics by Source
Automation Jobs | URL & Page Checkers
Insights | URL & Page
Reports | Chart Cards
Local Listings | Profiles & Content
Data Chat | General
Automation Jobs | URL & Page Checkers
Insights | URL & Page
Reports | Report Config
Reviews | General
Data Warehouse | Pipelines
Local Listings | General
Clients | General
Social Posts | Creating Posts
Reports | Creating & Sharing
Social Posts | Managing Posts
Local Listings | Profiles & Content
Data Warehouse | Data Studio
Reports | Report Config
Insights | Managing Insights
Reviews | General
Reports | Editing
Reports | Report Config
Insights | Managing Insights
Reviews | General
Reviews | General
Reviews | General
Automation Jobs | URL & Page Checkers
Insights | URL & Page
Automation Jobs | URL & Page Checkers
KPI Forecasting | Settings & Status
Clients | General
Reports | Chart Cards
Social Posts | Managing Posts
Automation Jobs | Search Console
Insights | Other Insight Types
Automation Jobs | Search Console
Insights | Other Insight Types
Local Listings | General
Clients | General
Reports | Creating & Sharing
Integrations | General
Local Listings | Categories & Services
Local Listings | Categories & Services
Settings | Account & Billing
Reports | Creating & Sharing
Social Posts | General
Settings | FAQ
Settings | Account & Billing
Reports | Content Cards
Data Sources | Fields & Formulas
Reports | Report Config
Reports | Content Cards
Settings | Account & Billing
Data Sources | Fields & Formulas
Reviews | General
Settings | Account & Billing
Clients | General
Data Warehouse | Data Studio
Settings | Users
Settings | Users
Social Posts | General
Settings | Other
Local Listings | Performance & Activity
Settings | Comments & Notes
Integrations | Webhook — Other
Settings | FAQ
Formulas are how you turn raw platform fields into the metrics you actually report on - blended spend, total conversion value across platforms, a cleaned-up campaign name. You write the logic once as a custom field, and it's reusable everywhere in the Data Model.
Find it: Data Sources -> Data Model -> + (Create custom field), or Edit on an existing custom field.
SUM(googleAds.spend, facebookAds.spend).SUM, IF, COALESCE, CONCATENATE, etc.SUM/AVG written inside the formula - see below.Both produce the same thing: a formula string you can keep editing by hand. AI drafts are a starting point - always read the result before saving. AI may use any supported function below (including ones not listed in autocomplete).
Fields are referenced as source.field - for example googleAds.spend or facebookAds.spend. Start typing and the editor autocompletes from the fields available to this client. You can also reference another custom field; the editor matches on its label but inserts its custom_... id.
Functions wrap around one or more operands:
SUM(googleAds.spend, facebookAds.spend, tiktokAds.spend)
Text goes in quotes, numbers are bare:
CONCATENATE(googleAds.campaignName, " - ", googleAds.adGroupName)
A formula is one outer function call wrapping its operands, or a plain arithmetic / comparison expression. So all of these are fine:
SUM(googleAds.spend, facebookAds.spend)
googleAds.spend / googleAds.clicks
IF(googleAds.clicks > 0, googleAds.spend / googleAds.clicks, 0)
Operands can be field references, numbers, quoted text, arithmetic, comparisons, or a nested function - and arithmetic can combine function calls:
SUM(googleAds.spend, facebookAds.spend) / SUM(googleAds.clicks, facebookAds.clicks)
The functions you use determine the field's Kind:
Picking the wrong Kind is the most common save error. Jepto names it explicitly, e.g.:
This field is set to Metric, but CONCATENATE only works on Dimension fields. Switch the type to Dimension below, or use a metric function such as SUM or AVG.
It also checks the fields you referenced, not just the functions - passing a text dimension into SUM, or a numeric metric into CONCATENATE, is rejected with the field's own name in the message.
These are the spreadsheet-style functions Jepto's formula engine supports (case-insensitive). The Formula Builder autocomplete lists the most common ones (SUM, AVG, IF, CONCATENATE, TITLECASE, UPPERCASE, LOWERCASE, JSON_STRUCT); the rest can be typed manually or generated by AI.
There is no separate CASE(...) function name in expressions. Conditional branching is written with IF (which compiles to case/when logic under the hood). Use nested IF for multi-branch CASE-style grouping. Use COALESCE when you want the first non-null value.
Nested IF (CASE-style buckets):
IF(REGEXP_MATCH(googleAds.campaignName, "summer_.*"), "Summer", IF(REGEXP_MATCH(googleAds.campaignName, "brand_.*"), "Brand", "Other"))
Patterns use RE2-style regex. The pattern (and replacement, where used) must be quoted string literals.
Examples:
REGEXP_CONTAINS(googleAds.landingPage, "/blog/")
REGEXP_MATCH(googleAds.campaignName, "summer_.*")
REGEXP_EXTRACT(googleAds.url, "utm_campaign=([^&]+)")
REGEXP_REPLACE(googleAds.url, "[?&].*", "")
REGEXP_CONTAINS vs REGEXP_MATCH: contains looks for a substring match; match requires the entire value to match the pattern.
REPLACE vs REGEXP_REPLACE: REPLACE does a literal substring swap; REGEXP_REPLACE uses a regex pattern.
JSON_STRUCT rules: the first operand must be a source.field reference to a structured field. The path must be a quoted JSONPath starting with $. - e.g. '$.placeId'. Property chaining is also supported in some forms, e.g. JSON_STRUCT(field).name or JSON_STRUCT(field).items[0].
DATE_DIFF units (string literal third argument): day / days, month / months, year / years.
Ratios don't need a dedicated function:
googleAds.conversionValue / googleAds.spend
For division that should return null when the divisor is zero, prefer SAFE_DIVIDE over plain /.
Blended spend across platforms
SUM(googleAds.spend, facebookAds.spend, tiktokAds.spend)
Kind: Metric. Format: Currency. Aggregation: Sum.
Blended ROAS across platforms
SUM(googleAds.conversionValue, microsoftAds.conversionValue) / SUM(googleAds.spend, microsoftAds.spend)
Total conversion value from both platforms divided by total spend from both. Kind: Metric. Format: Decimal. Aggregation: Average - a ratio shouldn't be summed across rows.
Cost per conversion, safe against zero conversions
SAFE_DIVIDE(googleAds.spend, googleAds.conversions)
Or with an explicit fallback:
IF(googleAds.conversions > 0, googleAds.spend / googleAds.conversions, 0)
Fill missing values with COALESCE
SUM(googleAds.clicks, COALESCE(googleAnalytics4.sessions, 0))
A combined campaign label
CONCATENATE(googleAds.campaignName, " | ", googleAds.adGroupName)
Kind: Dimension. Useful when you want campaign and ad group on one table axis instead of two columns.
Pull a value out of a Business Profile struct
JSON_STRUCT(googleBusinessProfile.metadata, '$.placeId')
Business Profile stores several fields as structured objects; JSON_STRUCT reaches in and pulls out a single scalar. Kind: Dimension.
CASE-style campaign buckets with nested IF
IF(REGEXP_MATCH(googleAds.campaignName, "summer_.*"), "Summer", IF(REGEXP_MATCH(googleAds.campaignName, "brand_.*"), "Brand", "Other"))
Kind: Dimension.
Saving a custom field takes more than the expression:
Currency - $1,234.56, Percentage - 5.23%, Whole number - 1,234, Compact - 1.2M) plus precision and currency controls, with a live preview of how a value will render. Dimension fields are always plain text.Formula functions run after the underlying metrics are already aggregated for the report period - not row by row. SUM(googleAds.spend, facebookAds.spend) doesn't add up every row in the raw data; it adds the two platforms' already-aggregated totals for whatever date range and breakdown that chart is using.
This matters most for rate metrics. Don't build "average CTR" by averaging per-day CTRs - build it as total clicks divided by total impressions:
SUM(googleAds.clicks, microsoftAds.clicks) / SUM(googleAds.impressions, microsoftAds.impressions)
An average of daily CTRs treats a low-traffic day and a high-traffic day as equally important; a true weighted rate doesn't.
These are two different settings and it's easy to conflate them:
SUM/AVG/MIN/MAX you write inside the expression, combining several source fields (e.g. spend across three platforms).A formula can use SUM internally and still have its field-level Aggregation set to Average, if that's the correct way to roll the result up. Ratios almost always want Average; totals want Sum.
Plain / produces a broken or blank value when the denominator is zero - common with ROAS or CPA on a slow day with no conversions. Prefer SAFE_DIVIDE, or wrap the division in IF:
SAFE_DIVIDE(googleAds.spend, googleAds.conversions)
IF(googleAds.conversions > 0, googleAds.spend / googleAds.conversions, 0)
A formula can reference another custom field, so you can build a "blended spend" field once and reuse it inside a "blended CPA" field. Type the field's name and pick it from autocomplete - the editor inserts its custom_... id.
Circular references (A refers to B, B refers back to A) are detected and rejected on save.
Custom fields can be scoped to a single client, or switched to Enable for All Clients to make them available account-wide. Once a field is global it can't be moved back to a single client - Jepto blocks the toggle with:
You cannot change a global card field to client-scoped.
If you need a one-off variant later, create a new client-scoped field instead.
Thanks a lot for your feedback! If you’d like a member of our support team to respond to you, please send a message here
Oops! Something went wrong while submitting the form.
Thanks a lot for your feedback! If you’d like a member of our support team to respond to you, please send a message here
Oops! Something went wrong while submitting the form.