Update to Advanza
Snapshot Nov 1, 2026 · 12:10 UTC · version 1.2.0
Collection source: downloaded plugin package.
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.
Up to 10 plugins free · no card required.
All fields and original values.
Skill instructions
Oct 24, 2026 · 13:34 UTC
- For one email to the list: create it with `email-campaigns.create-draft` (no `campaignId`), set its
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 JSONSKILL.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
"---\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"
"---\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