How to integrate Wix and EmailOctopus without Zapier

September 4, 2026 how to software

I help manage a Wix site, and since Wix switched to a new forms system, my Zapier integration broke. But who needs Zapier anyway? So I built an automation to directly create a contact in EmailOctopus when the form is submitted. Here’s how:

  1. Create an API key in EmailOctopus
  2. Save the key as a secret in the Wix secrets manager. Make note of the name you use.
  3. Create a Wix form automation with the trigger as form submission of your old style form.
  4. Make this Velo code the action, filling in the secret name, list ID, and tags:
import { fetch } from "wix-fetch";
import { secrets } from "wix-secrets-backend.v2";
import { elevate } from "wix-auth";

//// FILL THESE IN WITH YOUR VALUES /////////////////
const secretName = "eo_bearer";
const listId = "00000000-0000-0000-0000-000000000000";
const tags = {
  "my tag name": true,
};
/////////////////////////////////////////////////////

/**
 * Autocomplete function declaration, do not delete
 * @param {import('./__schema__.js').Payload} options
 */
export const invoke = async ({ payload }) => {
  const elevatedGetSecretValue = elevate(secrets.getSecretValue);
  const eoToken = await elevatedGetSecretValue(secretName);
  const url = `https://api.emailoctopus.com/lists/${listId}/contacts`;
  const body = {
    email_address: payload.contact.email,
    fields: {
      FirstName: payload.contact.name.first,
      LastName: payload.contact.name.last,
    },
    tags: tags,
    status: "subscribed",
  };
  return await fetch(url, {
    method: "put",
    headers: {
      Authorization: `Bearer ${eoToken}`,
      "content-type": "application/json",
    },
    body: JSON.stringify(body),
  })
    .then((response) => response.json())
    .catch((err) => console.error(err));
};
  1. Open the Wix site logs page.
  2. Click Test and see if it worked. Depending on your Wix form and on your email list fields you may need to change the parts after payload in the lower section of the script, or the names of fields. If you got an error it will show on the logs page. If it worked, you should have a new contact in EmailOctopus.

I hope this is useful to someone!