Category · Custom functions

Drop in your own logic. Run it next to ours.

Custom Functions actions: write JavaScript or Python, call any API, transform any column, and run inside the same workflow as TexAu native actions — sandboxed, billed by runtime.

In this category

actions across multiple integrations. Every one runs as a step in a workflow.

Every enrichment platform eventually hits the wall where the user has a use case the platform doesn't have a built-in action for. The traditional response is "file a feature request and wait." The Clay-era response is "write a formula in our DSL." The TexAu response is Custom Functions — drop in JavaScript or Python, call any API, transform any column, and run inside the same workflow as native actions, with the same orchestration, billing, and audit trail.

The action surface is two primitives that compose to almost everything. Run JavaScript executes a sandboxed JS function with the row context and any fetch calls you need. Run Python does the same for Python with the standard library and a curated allowlist of packages (requests, pandas, numpy, pydantic). Both have access to environment variables and secrets you've configured at the workspace level, so calling a custom API doesn't require hardcoding a key.

The execution model is sandboxed-per-call. Each invocation runs in an isolated container with a strict memory and runtime ceiling — typical limits are 512 MB and 30 seconds, override-able for paid tiers. The container has outbound HTTP access (so you can call any API) and no inbound or filesystem access. Code does not persist across invocations; if you need state, you explicitly read from and write to a TexAu workspace store.

The cost model is per-second of runtime, not per-call, which keeps small functions cheap and bills heavy compute fairly. Most custom functions complete in under 500 ms and cost in the noise. Heavy ML inference or large data transforms are the exception and we surface that on the workspace billing.

The high-leverage patterns we see most:

Custom enrichment. Your team has a contract with a niche provider — a regional data source, a specialty API, an in-house signal feed — that doesn't have a TexAu action. Custom Functions wraps it. You write a 20-line JS function that takes the row, calls your provider, and returns the enriched fields. The rest of the workflow doesn't know it's a custom function — it looks like any other action.

Custom transformations. The output of one action doesn't quite match the input shape of the next. A native "shape this column" action would be its own product; Custom Functions makes it a one-liner. You write row.email = row.email.trim().toLowerCase() and ship.

Custom routing. ICP score thresholds change by region, by deal cycle stage, by quarter. A static "route by score" action is a feature request. A 30-line Custom Function that reads from your workspace store and routes accordingly is the actual answer.

Custom integrations. Your CRM is a regional one we don't natively support yet — Freshsales, SugarCRM, a homegrown system with a REST API. Custom Functions calls it directly. The rest of your workflow runs on native actions; only the CRM sync is custom.

Custom Functions is also the safety valve for the platform's roadmap. We can't build every action every customer needs. Custom Functions means you don't wait for us — you write the logic you need, ship it today, and we promote the most common patterns into native actions over time. Several of today's native actions started as customer-written Custom Functions we observed running at scale.

The actions

Every custom functions action on the platform.

Chain any of them into one run. Same credits, same audit trail, same schedule.

The action grid is wired to Payload. As actions sync into the Action Registry, they appear here automatically. In the meantime, see the full library or browse Javascript, and Python.

How teams run it

Three workflows that ship in the first week.

Every workflow below is a real pattern we see customers build inside the first month. None require code outside the action call itself.

  • GTM Engineer · Outbound team

    Find → verify → push to outbound (custom functions)

    An SDR team runs a Sales Nav search every Monday, enriches the result through custom functions, dedupes against HubSpot, and pushes the residual to Smartlead. The whole sequence runs on schedule — no human touches it until the rep opens their inbox.

  • RevOps · CRM owner

    Keep the CRM current

    A RevOps lead schedules a weekly pass over stale HubSpot records, re-runs custom functions, and writes the fresh fields back with conflict resolution. Failed lookups cost nothing, so the refresh bill tracks the data that actually changed.

  • Agency · GTM lead

    Score before anyone touches it

    An agency runs custom functions across a new account list, then adds an AI column on their own OpenAI or Anthropic key to score ICP fit in the same table. Only the rows above the bar reach a rep.

FAQ

Common questions.

What can a Custom Function actually do?

Run sandboxed JavaScript or Python with outbound HTTP access. No inbound, no filesystem, no persistent state across calls. Memory and runtime ceilings (defaults: 512 MB, 30s) are overridable on paid tiers.

How is this different from a Clay formula?

Clay formulas are a DSL inside a spreadsheet. Custom Functions is real JavaScript or Python with HTTP access — closer to a serverless function than a formula. Use it when the logic is too complex for a formula and too narrow for a native action.

How are secrets handled?

Workspace-level environment variables. Your code reads them via process.env or os.environ; they never appear in workflow definitions, audit logs, or output. Rotation is per-workspace.

Drop in your own logic. Ship today.

Sandboxed JS or Python. HTTP access. Billed by runtime.