One function reaches the whole catalog. This page is its full grammar: what each argument position means, how to pick a single value out of a response, how a range becomes a filled column, and what the cell says when something is wrong.
Every example below is shown for both platforms — the formula is the same, only the name differs. Pick your tab and paste.
The grammar
=VERVE("source", …required inputs, …"name", value, "field", "path")=VERVE.CALL("source", …required inputs, …"name", value, "field", "path")Three zones, always in that order:
- The source name, as a string.
"weatherforecast","dnslookup","goldprice". The sidebar and autocomplete both list them, so there is nothing to memorise. - Required inputs, positionally, in the order the source's reference page lists them. Plain strings, numbers, or cell references.
- Options, as a name followed by its value, repeated. The same shape as
SUMIFS."field"is one of these, and it is the one you want on essentially every formula — see picking a value.
=VERVE("weatherforecast", "London", "field", "tempC")
=VERVE("currencyconverter", 100, "USD", "EUR", "field", "convertedValue")
=VERVE("goldprice", "currency", "EUR", "field", "ounce")
=VERVE("agecalculator", A2, "timezone", "Europe/London", "field", "age_breakdown.years")=VERVE.CALL("weatherforecast", "London", "field", "tempC")
=VERVE.CALL("currencyconverter", 100, "USD", "EUR", "field", "convertedValue")
=VERVE.CALL("goldprice", "currency", "EUR", "field", "ounce")
=VERVE.CALL("agecalculator", A2, "timezone", "Europe/London", "field", "age_breakdown.years")Option names are case-insensitive. An option the source does not have is an error that names the ones it does, rather than a silently wrong answer. If a required input also appears as an option pair, the positional value wins.
A single "name=value" string would let your own data decide where the argument ends. A base64
payload ends in =, so =VERVE("base64", "SGVsbG8=", "decoded") once parsed SGVsbG8 as an
option name, dropped the payload and encoded the word decoded instead — with an argument count
that looked perfectly valid. Splitting the pair means the boundary comes from the schema and
never from the content.
Picking a value with "field"
A cell holds one value, so a formula should ask for one value. "field" takes a path and the
cell holds exactly that:
=VERVE("weatherforecast", "London", "field", "tempC")=VERVE.CALL("weatherforecast", "London", "field", "tempC")The paths are listed on the source's reference page and in the sidebar beside each source.
weatherforecast offers these, all at the top level:
| Path | Value |
|---|---|
tempC | 13.3 |
tempF | 55.9 |
windMph | 4.7 |
windDir | W |
feelslikeC | 13 |
pressureMb | 1022 |
Not every response is flat. Where one nests, the path is dotted — exactly as the reference page writes it:
=VERVE("binlookup", A2, "field", "issuer.name")
=VERVE("dnslookup", A2, "field", "records.SOA.nsname")
=VERVE("iplookup", A2, "field", "country")=VERVE.CALL("binlookup", A2, "field", "issuer.name")
=VERVE.CALL("dnslookup", A2, "field", "records.SOA.nsname")
=VERVE.CALL("iplookup", A2, "field", "country")The last one is the reminder: iplookup returns country, city and timezone at the top
level, not under a location. Read the path off the reference page rather than guessing at the
shape — a path that isn't there costs a credit before it tells you so.
No source has an input or a response field called field, so the reserved name can never be
shadowed by a real one.
Omit "field" entirely and the whole response spills into two columns, every path beside its
value. It is the quickest way to see what a source returns — but it is a scratch move, not a
formula to keep: it occupies a block of cells, and one lookup's worth of credits buys a table
you then have to point a real formula at anyway.
Filling a column from a range
Pass a range where a single value would go and every row resolves. "field" is required here,
not optional — a spilled column has one value per row by definition:
=VERVE("timezonelookup", A2:A9, "field", "timezone")=VERVE.CALL("timezonelookup", A2, "field", "timezone")In Google Sheets that is one batched request that spills down the column. Nine rows, one call — quicker and cheaper than nine formulas, and the output grows when you add a row to the range.
In Excel, write the formula against a single cell and drag it down, or select the input column in the sidebar and use Values, which fetches the whole selection in one pass.
Scalars alongside a range are broadcast to every row, so only the varying input needs to be a range:
=VERVE("currencyconverter", A2:A20, "USD", "EUR", "field", "convertedValue")=VERVE.CALL("currencyconverter", A2, "USD", "EUR", "field", "convertedValue")A =VERVE() formula is live — it recalculates, and each recalculation is a fresh lookup that
spends credits. For a one-off enrichment of a long column, the sidebar's Values mode writes
static answers instead: one batched request, and nothing recurring. Fills over 50 rows confirm
with a credit estimate before they run.
Nesting
The formula returns an ordinary value, so it goes anywhere a value goes:
=SUM(VERVE("goldprice", "field", "ounce"), B2)
=ROUND(VERVE("currencyconverter", A2, "USD", "EUR", "field", "convertedValue"), 2)
=IF(VERVE("weatherforecast", "London", "field", "tempC") > 20, "Warm", "Cool")=SUM(VERVE.CALL("goldprice", "field", "ounce"), B2)
=ROUND(VERVE.CALL("currencyconverter", A2, "USD", "EUR", "field", "convertedValue"), 2)
=IF(VERVE.CALL("weatherforecast", "London", "field", "tempC") > 20, "Warm", "Cool")This is the other reason "field" belongs on every formula: a function that expects a number
gets a number. Charts, pivot tables, sparklines and conditional formatting all read those cells
directly, with no extra plumbing.
The two helper functions
Most work goes through the main function. Two shorthands exist for common shapes.
A field by query string. When you already have parameters written out, this skips the positional-argument rules entirely:
=VERVEFIELD("iplookup", "ip=8.8.8.8", "country")=VERVE.FIELD("iplookup", "ip=8.8.8.8", "country")A currency conversion. The amount, the source currency, the target currency — nothing else:
=VERVEFX(100, "USD", "EUR")=VERVE.FX(100, "USD", "EUR")Both return a single value, so neither takes a "field". VERVEFX returns the converted amount
as a number, never a substituted or partial one: if your plan withholds the value, the cell says
so rather than showing something that is not it.
The same function, two names
Excel puts the functions in a VERVE namespace; Google Sheets does not.
| Does | Google Sheets | Excel |
|---|---|---|
| Read a source | =VERVE(…) | =VERVE.CALL(…) |
| Read a field by query string | =VERVEFIELD(…) | =VERVE.FIELD(…) |
| Convert a currency | =VERVEFX(…) | =VERVE.FX(…) |
Arguments, "field", error text and billing are identical. Two behavioural differences are worth
knowing:
- Range fill. Sheets resolves a range in one batched call and spills. Excel resolves a single cell per formula, so drag it down or use the sidebar's Values fill for the batched path.
- Long values. A value too large for a cell is truncated and marked
… [truncated]rather than dropped — the limit is about 50,000 characters in Sheets and 32,767 in Excel.
What a cell says when it fails
Failures come back as text, beginning with #ERR:
| Cell reads | Cause |
|---|---|
#ERR Connect first: Extensions ▸ VerveSheets | No credential stored yet. Excel words it #ERR Not connected — connect in the VerveSheets pane. |
#ERR weatherforecast needs city | A required input is missing, or points at a blank cell. Every required name is listed. |
#ERR No "zone" in agecalculator. Try: timezone, field | An option name the source does not have. The message lists the valid ones. |
#ERR Use "name", value pairs — "metric" has no name | An unpaired value. A trailing name with no value is treated as omitted, not as an error. |
#ERR No field "tempc" | The path is not in the response, on a range fill. Paths are case-sensitive. |
#ERR Replace <city> with a cell or value | The sidebar's preview template was copied before the placeholder was filled in. Where the source has a curated sample the message ends — e.g. London. |
#PREMIUM(riskScore) | The field exists, but your plan does not include it. |
#PREMIUM(deep) | An option was dropped by the plan gate, so the answer would be to a different question than the one you asked. |
A single-cell formula whose "field" path is missing from the response is the one failure Google
Sheets raises as a real error — No data point "tempc". — readable by hovering the cell. Excel
returns it as #ERR No data point "tempc" like everything else, and a range fill on either
platform writes #ERR No field "tempc" into the row. Same cause, three spellings.
They are text and not real spreadsheet errors for one reason: Excel cannot render a custom
message on an error value — a failure would be a bare #VALUE! with nothing to read. Text shows
the same sentence on both platforms.
The cost of that choice: IFERROR() does not catch them. To branch on failure, test for the
prefix instead:
=IF(LEFT(A2, 4) = "#ERR", "retry", A2)=IF(LEFT(A2, 4) = "#ERR", "retry", A2)Wrap that in IFERROR() as well if a missing path is possible — in Sheets that single case is a
real error and only IFERROR() catches it.
A missing path is an error rather than a blank on purpose. A blank cell after a paid lookup looks identical to a source that genuinely returned nothing — and on a filled column that is a whole column of silence with the credits already spent.
Credits
One lookup, one credit charge — per cell, or per row on a filled range. Costs vary by source and are listed on each source's page and in all sources.
Two things spend more than people expect:
- A live formula recalculates. Every recalculation is a new lookup. For data that does not need to move, use the sidebar's Values fill.
- A dragged formula is one call per row. In Sheets, a range argument is a single batched
call instead — prefer
A2:A9over nine copies of the same formula.
The sidebar shows your remaining balance while you work, and analytics breaks usage down by source afterwards.
Next
The sidebar writes these formulas for you and fills selections without typing.
All sources lists the catalog, each with its inputs and the paths you can pass
to "field".