Skip to integration content

How to integrate Unify with Neon

To integrate Unify with Neon using the serverless driver, send a Play webhook to an external HTTP endpoint, such as a Vercel Function. That endpoint validates the prospect and uses the driver to execute parameterized SQL. The database client and the webhook receiver are separate parts of this architecture.[1][3][4]

By UnifyDocumentation reviewed
Connection
Via webhook + endpoint
Developer platforms
Tool
Neon
External HTTP receiver
Data flow
Unify → Vercel Function → Neon Postgres
JSON payload

At a glance

  1. Send the webhook to an application endpoint
  2. Keep database credentials and SQL execution server-side
  3. Choose row identity and conflict behavior before launch

When this workflow makes sense

Start with the decision your team needs to make, then choose the connection that supports it.

A database handoff should answer a business question: are you storing the latest state of a prospect, or a history of separate events? Those models need different keys and different rules for repeated delivery. Decide what a row means before choosing the SQL operation. Otherwise, the same prospect can become duplicate work or a later update can overwrite useful history.

A good fit when

Teams with an application backed by Neon Postgres that need selected prospect facts in their own schema and can maintain the HTTP receiver.

Reconsider the plan when

A database table by itself does not assign an owner or perform a sales action. Choose who or what uses each saved row, and avoid treating an append-only event log as a current prospect record.

Design the handoff

Use this framework to agree on the input, the next action, and who owns the result.

Suggested workflow design, based on the documented capabilities below.

StageDecision to make
ReceiverSend Unify to an external HTTPS handler that owns authentication and validation.
IdentityDecide whether a row represents a person, company, or distinct handoff.
PersistenceUse fixed columns, parameterized values, and a deliberate uniqueness rule.
ConsumptionName the application or person that uses the saved data and checks failures.

Explore the scenarios

Choose the situation that fits your team and work through the proposed plan.

Open a scenario to explore its plan. Checklists track your selections in this page only.

Maintain the latest prospect snapshot

An internal application needs the current set of selected prospect facts in Postgres.

The decision that matters

One row should represent one agreed identity. Decide which incoming fields can replace existing values.

  1. Choose the identity and matching unique constraint
  2. Implement a parameterized write through the HTTP receiver
  3. Send a sample twice with one changed fact and inspect the row
Your validation checklist
0 of 3 checks marked by you
Record distinct handoffs for review

The team needs to distinguish separate business events from delivery attempts.

The decision that matters

A prospect identity alone cannot identify a distinct event. Only use this design when a stable handoff identity is available across retries.

  1. Define what makes two handoffs different and where their identities come from
  2. Implement event uniqueness without using the static event label as the key
  3. Compare a repeated delivery with a genuinely distinct handoff
Your validation checklist
0 of 3 checks marked by you

Illustrative workflow, not a preconfigured automation. Complete these checks in your own account.

Connect your tools to Unify

Set up your integration or walk through it with our team

Define success before launch

Inspect the data and the intended outcome separately. Connection status is only the first check.

Expected, not tested

The external handler saves the fictional prospect to the intended Neon table, and a repeated handoff follows the chosen conflict rule.

Inspect the committed row in the same branch and database used by DATABASE_URL. A receiver log showing parsed JSON is not proof of a successful database transaction.

Documentation-based reference. This workflow has not been tested end to end. Use a record or event you control before enabling live activity.

Questions answered

Common decisions when connecting Unify and Neon.

Can I send the prospect JSON directly to the Neon serverless driver?

The driver is a JavaScript database client used by your code. For this architecture, a separate HTTP endpoint receives and validates the prospect JSON before issuing SQL through the driver.[3]

Does the external receiver have to run on Vercel?

Vercel is the example host in this article. Choose a server-side runtime compatible with the Neon driver and implement the HTTP receiver there.[3]

How do I keep incoming values out of SQL syntax?

Use the driver’s tagged-template query function or a parameterized query. Keep identifiers controlled by your application rather than accepting table or column names from the webhook.[3]

How can I avoid a second row on a repeated handoff?

Choose a stable identity, enforce the matching unique constraint, and implement an intentional ON CONFLICT action. The correct key depends on whether you store prospects, companies, or events.[6]

Will the inserted row or query result be available later in the Unify Play?

No. The outbound webhook does not pass its response body to later Play steps. Design and verify a separate supported return path if the process needs one.[2]

Limits & decisions

Check these boundaries before designing a live workflow around the connection.

  • This is a custom endpoint and database pattern, not a native Unify connector
  • The external receiver must handle authentication, validation, errors, and response timing
  • Database credentials belong only in the server-side receiver configuration
  • The sample defines no table schema or automatic synchronization policy
  • No live database writes or end-to-end runs have been performed

What the connection supports

Understand the connection, the data involved, and the behavior that matters for a Unify + Neon workflow.

Connection flowVia webhook + endpoint
Webhook to database bridge

POST / JSON to Vercel, then parameterized SQL to Neon

Documented behavior at a glance
DecisionWhat to know
HTTP entry pointThe proposed Vercel Function receives the Unify request[4]
Database clientThe Neon serverless driver executes queries over HTTP or WebSockets[3]
ValuesTagged templates or parameterized queries separate SQL from incoming values[3]
DestinationThe connection string identifies a database, branch endpoint, and role[5]
ConflictsPostgres ON CONFLICT uses a unique or exclusion constraint as applicable to the chosen action[6]

Technical setup reference

References and requirements for the Neon connection.

Connection requirements and setup checklist

Before connecting

  • A Unify Play with a Webhook action
  • An external HTTP receiver and a developer responsible for its implementation
  • A Neon database, destination table, and database role with only the required permissions
  • A DATABASE_URL stored in the receiver environment and a separate webhook secret
  1. Choose the row and its identity

    Define a prospect table with the fields you need. Choose whether identity means a person, company, or individual handoff. Add the appropriate unique constraint and decide which incoming values may update an existing row.[6]

  2. Create the external receiver

    Deploy a POST handler, for example /api/unify-to-neon in a Vercel application. Authenticate the custom header and validate the JSON before performing a write. The Unify URL is this handler’s HTTPS URL, not a Postgres connection string.[1][4]

  3. Connect the driver on the server

    Install @neondatabase/serverless in the receiver. Read DATABASE_URL from its server-side environment and create the query client with neon(). Use tagged-template parameters or query parameters for prospect values; never concatenate incoming values into SQL.[3][5]

  4. Implement conflict handling

    For a table with an appropriate unique constraint, use INSERT ... ON CONFLICT with a deliberate action, such as updating selected facts or keeping the existing row. Check the SQL result before reporting that persistence succeeded.[6]

  5. Send and inspect a controlled prospect

    In Unify, use POST, JSON, and the matching API Key (Header). Inspect Expand preview, send the sample, and query the intended Neon database for its row. Repeat the request and check that only the intended fields change.[2][3]

Request configuration

Method
POST
URL pattern
https://YOUR_APP.vercel.app/api/unify-to-neon
Headers
Content-Type: application/json
X-Unify-Webhook-Key: YOUR_WEBHOOK_SECRET
Authentication
Suggested custom authentication: implement a check for X-Unify-Webhook-Key in your receiver and store the expected value as a server-side secret. In Unify, choose API Key (Header), use that header name, and enter the matching value. The header name is chosen for this example; the platform does not validate it automatically.

Choose JSON as the body format. Unify sets Content-Type automatically. The receiver must respond within Unify’s 8-second timeout; request responses are not passed to later Play steps.[2]

Replace URL placeholders with the actual receiver URL from your account or deployed application. These example URLs are not working endpoints.

Example handoff payload

Start with a fictional prospect. Validate the resolved values before using a real record.

Inspect the sample payload and field mapping
Example request body
{
  "event": "prospect_handoff",
  "prospect_name": "Alex Morgan",
  "prospect_email": "alex@example.com",
  "company_name": "Example Company",
  "company_domain": "example.com"
}

Fictional data. Replace sample values before using a real Play.

The keys are an example handoff format, not required Unify field names. Use the field mapping to distinguish record data from fixed settings. Select available fields in your Play and inspect Expand preview; do not replace configuration values with prospect data.[2]

Payload fieldValue to send
eventA fixed label you choose for this workflow
prospect_nameUse {{ person.first_name }} and {{ person.last_name }} for the prospect name
prospect_emailUse {{ person.email }}; decide how to handle missing values
company_nameUse {{ company.name }}
company_domainUse {{ company.domain }}

Map the JSON properties to fixed SQL columns in your receiver. Parameterize values and keep table and column names controlled by your code. The sample event string identifies the kind of handoff; it does not uniquely identify a person or a delivery.

Troubleshooting

Start with the stage where the expected data or action stops appearing.

The webhook URL looks like a database connection string

Point Unify at your external HTTPS receiver. Keep the Postgres connection string inside that receiver; the serverless driver uses it to connect to Neon.[3][4]

The write lands in the wrong database

Check the branch, database, and role selected when copying the Neon connection string, then compare the environment assigned to the actual deployment.[5]

Retries create duplicate or unexpected rows

Review the unique constraint and ON CONFLICT action. Confirm the business identity is stable across repeated requests and that application-owned fields are not unintentionally overwritten.[6]

Sources & review

Official documentation reviewed on September 15, 2026.

Technical claims link to primary documentation from Unify and the destination tool. Scenarios, field choices, and recovery plans are editorial implementation examples. Documentation review is separate from execution testing.

Documentation reviewed; end-to-end execution not tested. No named technical reviewer has signed off on these articles yet.

Content updated: . Report a correction to Unify with the tool name, source URL, and behavior you observed.

  1. [1] Unify: Webhook action
  2. [2] Unify: Webhooks in Plays
  3. [3] Neon: Serverless driver
  4. [4] Vercel: Functions for the external receiver
  5. [5] Neon: Connect from any application
  6. [6] PostgreSQL: INSERT and ON CONFLICT

Get started with Unify

Create your account or book a demo with our team