← AdvanzaCONTENT HISTORY

Update to Advanza

Snapshot Nov 1, 2026 · 12:10 UTC · version 1.2.0

Collection source: downloaded plugin package.

WHAT CHANGED

Instructions updated for advanza-list-to-campaign

Skill instructions — Now says: - For one email to the list: let the user pick a template in `open_email_template_picker` unless they asked for a plain email, create it with...

Observed in instructions or declared skills. Runtime behavior has not been tested.

Save Advanza and check future changes in Following.

Up to 10 plugins free · no card required.

All fields and original values.

Skill instructions

Before

Oct 24, 2026 · 13:34 UTC

- For one email to the list: create it with `email-campaigns.create-draft` (no `campaignId`), set its

After

Nov 1, 2026 · 12:10 UTC

- For one email to the list: let the user pick a template in `open_email_template_picker` unless they asked for a plain email, create it with `email-campaigns.create-draft` (no `campaignId`), set its

Compare saved observations

Download comparison JSON

SKILL.md text changes

− removed · + added

--- before
+++ after
@@ -46,7 +46,8 @@
 
 ## 4. Prepare the email
 
-- For one email to the list: create it with `email-campaigns.create-draft` (no `campaignId`), set its
+- For one email to the list: let the user pick a template in `open_email_template_picker` unless they
+  asked for a plain email, create it with `email-campaigns.create-draft` (no `campaignId`), set its
   recipients with `email-campaigns.set-audience` (`contactGroupIds` with the group), run
   `brand.check-text` on it, and show it with its link.
 - Check `mailbox-senders.list` and say which mailbox it will go from, or how to connect one.
Full technical diff · 1 changed fields

changed /skill_md_contents

BEFORE
"---\r\nname: advanza-list-to-campaign\r\ndescription: Turn a messy contact list the user pastes or uploads into clean Advanza contacts in a group, then an email to them. Use when they have a list of people to market to.\r\n---\r\n\r\n# From a messy list to an email\r\n\r\nThe user has a list - pasted text, a spreadsheet export, a sign-up sheet - and wants to reach the\r\npeople on it. Clean it, import it into a group, and prepare the email.\r\n\r\nExplicit instructions from the user always take priority over this skill, with one exception: the\r\nrule on restricted data in step 1 always applies. Answer in the user's language.\r\n\r\n## 1. Clean the list\r\n\r\n- **Leave out restricted data**, whatever the user asks: national ID or social security numbers, card\r\n  or bank numbers, health information, passwords and other credentials. Say which columns were left\r\n  out and why.\r\n- Map the other columns to contact fields: first name, last name, email, phone, job title. Company\r\n  names go in the import's `companies` section, each contact linked with `companyRef` (or `companyId`\r\n  for a company that already exists). The workspace's own fields go under `custom`, by the keys from\r\n  `custom-fields.list`.\r\n- Fix the obvious: trim spaces, split full names, lower-case emails. Drop rows with no email: Advanza\r\n  needs an email for each contact; list them as left out. Keep one row per email.\r\n- Show a short summary: rows in, rows to import, rows left out and why. Do not show the whole list\r\n  back unless asked.\r\n\r\n## 2. Confirm the basis\r\n\r\nBefore importing people to market to, ask the user to confirm they have a lawful basis to send them\r\nmarketing (for example consent, or an existing customer relationship). If they cannot confirm it,\r\nimport without the email step and say why.\r\n\r\n## 3. Import into a group\r\n\r\n- Create a group for the list with `contact-groups.create`, named after its source and date.\r\n- Import with `contacts.bulk-upsert`, at most 500 rows per call, with the group's id in each row's\r\n  `groupIds`. Give every row an `externalSource` (the list's name) and `externalId` (its row number),\r\n  so sending the same rows again never duplicates them.\r\n- Contacts are matched on email only; never merge or update a contact because the name matches. Rows\r\n  whose name matches an existing contact with another email come back as `possible_duplicate` and are\r\n  skipped: show them, and send them again with `includeRows` only for the ones the user says are new\r\n  people.\r\n- If the result is `Accepted` with a `jobId`, follow it with `wait_for_jobs`. Report what was created,\r\n  updated and skipped, with the reasons.\r\n\r\n## 4. Prepare the email\r\n\r\n- For one email to the list: create it with `email-campaigns.create-draft` (no `campaignId`), set its\r\n  recipients with `email-campaigns.set-audience` (`contactGroupIds` with the group), run\r\n  `brand.check-text` on it, and show it with its link.\r\n- Check `mailbox-senders.list` and say which mailbox it will go from, or how to connect one.\r\n- Sending is the user's call: offer `email-campaigns.schedule` at the time they want; the person\r\n  approves it on the card.\r\n\r\nWhen the user wants more than one item (several emails, or posts too), use a campaign instead:\r\n`campaigns.create`, `campaigns.set-audience` with the group, the drafts in the campaign, and\r\n`campaigns.activate` when everything is ready.\r\n"
AFTER
"---\r\nname: advanza-list-to-campaign\r\ndescription: Turn a messy contact list the user pastes or uploads into clean Advanza contacts in a group, then an email to them. Use when they have a list of people to market to.\r\n---\r\n\r\n# From a messy list to an email\r\n\r\nThe user has a list - pasted text, a spreadsheet export, a sign-up sheet - and wants to reach the\r\npeople on it. Clean it, import it into a group, and prepare the email.\r\n\r\nExplicit instructions from the user always take priority over this skill, with one exception: the\r\nrule on restricted data in step 1 always applies. Answer in the user's language.\r\n\r\n## 1. Clean the list\r\n\r\n- **Leave out restricted data**, whatever the user asks: national ID or social security numbers, card\r\n  or bank numbers, health information, passwords and other credentials. Say which columns were left\r\n  out and why.\r\n- Map the other columns to contact fields: first name, last name, email, phone, job title. Company\r\n  names go in the import's `companies` section, each contact linked with `companyRef` (or `companyId`\r\n  for a company that already exists). The workspace's own fields go under `custom`, by the keys from\r\n  `custom-fields.list`.\r\n- Fix the obvious: trim spaces, split full names, lower-case emails. Drop rows with no email: Advanza\r\n  needs an email for each contact; list them as left out. Keep one row per email.\r\n- Show a short summary: rows in, rows to import, rows left out and why. Do not show the whole list\r\n  back unless asked.\r\n\r\n## 2. Confirm the basis\r\n\r\nBefore importing people to market to, ask the user to confirm they have a lawful basis to send them\r\nmarketing (for example consent, or an existing customer relationship). If they cannot confirm it,\r\nimport without the email step and say why.\r\n\r\n## 3. Import into a group\r\n\r\n- Create a group for the list with `contact-groups.create`, named after its source and date.\r\n- Import with `contacts.bulk-upsert`, at most 500 rows per call, with the group's id in each row's\r\n  `groupIds`. Give every row an `externalSource` (the list's name) and `externalId` (its row number),\r\n  so sending the same rows again never duplicates them.\r\n- Contacts are matched on email only; never merge or update a contact because the name matches. Rows\r\n  whose name matches an existing contact with another email come back as `possible_duplicate` and are\r\n  skipped: show them, and send them again with `includeRows` only for the ones the user says are new\r\n  people.\r\n- If the result is `Accepted` with a `jobId`, follow it with `wait_for_jobs`. Report what was created,\r\n  updated and skipped, with the reasons.\r\n\r\n## 4. Prepare the email\r\n\r\n- For one email to the list: let the user pick a template in `open_email_template_picker` unless they\r\n  asked for a plain email, create it with `email-campaigns.create-draft` (no `campaignId`), set its\r\n  recipients with `email-campaigns.set-audience` (`contactGroupIds` with the group), run\r\n  `brand.check-text` on it, and show it with its link.\r\n- Check `mailbox-senders.list` and say which mailbox it will go from, or how to connect one.\r\n- Sending is the user's call: offer `email-campaigns.schedule` at the time they want; the person\r\n  approves it on the card.\r\n\r\nWhen the user wants more than one item (several emails, or posts too), use a campaign instead:\r\n`campaigns.create`, `campaigns.set-audience` with the group, the drafts in the campaign, and\r\n`campaigns.activate` when everything is ready.\r\n"
Full snapshot data
{
  "description": "Turn a messy contact list the user pastes or uploads into clean Advanza contacts in a group, then an email to them. Use when they have a list of people to market to.",
  "included_files": [],
  "name": "advanza-list-to-campaign",
  "skill_md_contents": "---\r\nname: advanza-list-to-campaign\r\ndescription: Turn a messy contact list the user pastes or uploads into clean Advanza contacts in a group, then an email to them. Use when they have a list of people to market to.\r\n---\r\n\r\n# From a messy list to an email\r\n\r\nThe user has a list - pasted text, a spreadsheet export, a sign-up sheet - and wants to reach the\r\npeople on it. Clean it, import it into a group, and prepare the email.\r\n\r\nExplicit instructions from the user always take priority over this skill, with one exception: the\r\nrule on restricted data in step 1 always applies. Answer in the user's language.\r\n\r\n## 1. Clean the list\r\n\r\n- **Leave out restricted data**, whatever the user asks: national ID or social security numbers, card\r\n  or bank numbers, health information, passwords and other credentials. Say which columns were left\r\n  out and why.\r\n- Map the other columns to contact fields: first name, last name, email, phone, job title. Company\r\n  names go in the import's `companies` section, each contact linked with `companyRef` (or `companyId`\r\n  for a company that already exists). The workspace's own fields go under `custom`, by the keys from\r\n  `custom-fields.list`.\r\n- Fix the obvious: trim spaces, split full names, lower-case emails. Drop rows with no email: Advanza\r\n  needs an email for each contact; list them as left out. Keep one row per email.\r\n- Show a short summary: rows in, rows to import, rows left out and why. Do not show the whole list\r\n  back unless asked.\r\n\r\n## 2. Confirm the basis\r\n\r\nBefore importing people to market to, ask the user to confirm they have a lawful basis to send them\r\nmarketing (for example consent, or an existing customer relationship). If they cannot confirm it,\r\nimport without the email step and say why.\r\n\r\n## 3. Import into a group\r\n\r\n- Create a group for the list with `contact-groups.create`, named after its source and date.\r\n- Import with `contacts.bulk-upsert`, at most 500 rows per call, with the group's id in each row's\r\n  `groupIds`. Give every row an `externalSource` (the list's name) and `externalId` (its row number),\r\n  so sending the same rows again never duplicates them.\r\n- Contacts are matched on email only; never merge or update a contact because the name matches. Rows\r\n  whose name matches an existing contact with another email come back as `possible_duplicate` and are\r\n  skipped: show them, and send them again with `includeRows` only for the ones the user says are new\r\n  people.\r\n- If the result is `Accepted` with a `jobId`, follow it with `wait_for_jobs`. Report what was created,\r\n  updated and skipped, with the reasons.\r\n\r\n## 4. Prepare the email\r\n\r\n- For one email to the list: let the user pick a template in `open_email_template_picker` unless they\r\n  asked for a plain email, create it with `email-campaigns.create-draft` (no `campaignId`), set its\r\n  recipients with `email-campaigns.set-audience` (`contactGroupIds` with the group), run\r\n  `brand.check-text` on it, and show it with its link.\r\n- Check `mailbox-senders.list` and say which mailbox it will go from, or how to connect one.\r\n- Sending is the user's call: offer `email-campaigns.schedule` at the time they want; the person\r\n  approves it on the card.\r\n\r\nWhen the user wants more than one item (several emails, or posts too), use a campaign instead:\r\n`campaigns.create`, `campaigns.set-audience` with the group, the drafts in the campaign, and\r\n`campaigns.activate` when everything is ready.\r\n"
}

SHA-256 of public snapshot: 77da39a36b6b981b32c0431523519aa41c70119f88490cd2c25d0f1c82d9e6f5