Implement Webflow data handling — CMS content delivery patterns, PII redaction in
form submissions, GDPR/CCPA compliance for ecommerce data, and data retention policies.
Trigger with phrases like "webflow data", "webflow PII", "webflow GDPR",
"webflow data retention", "webflow privacy", "webflow CCPA", "webflow forms data".
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Une commande directe contourne le prompt de vérification. Examinez la source avant de l'exécuter.
Implement Webflow data handling — CMS content delivery patterns, PII redaction in
form submissions, GDPR/CCPA compliance for ecommerce data, and data retention policies.
Trigger with phrases like "webflow data", "webflow PII", "webflow GDPR",
"webflow data retention", "webflow privacy", "webflow CCPA", "webflow forms data".
allowed-tools
Read, Write, Edit
version
1.5.0
license
MIT
author
Jeremy Longshore <jeremy@intentsolutions.io>
tags
["saas","design","no-code","webflow"]
compatibility
Designed for Claude Code
Webflow Data Handling
Overview
Handle sensitive data correctly when working with the Webflow Data API v2. Covers
PII in form submissions, ecommerce customer data, CMS content classification,
GDPR/CCPA compliance patterns, and data retention policies.
Prerequisites
Understanding of GDPR/CCPA requirements
Webflow API token with forms:read, ecommerce:read scopes
interfaceDataExport {
source: string;
exportedAt: string;
requestedBy: string;
data: {
formSubmissions: Array<{ formName: string; submittedAt: string; data: Record<string, any> }>;
orders: Array<{ orderId: string; status: string; total: number; items: string[] }>;
};
}
asyncfunctionexportUserData(siteId: string, userEmail: string): Promise<DataExport> {
constexportData: DataExport = {
source: "Webflow",
exportedAt: newDate().toISOString(),
requestedBy: userEmail,
data: { formSubmissions: [], orders: [] },
};
// 1. Find form submissions by emailconst { forms } = await webflow.forms.list(siteId);
for (const form of forms || []) {
const { formSubmissions } = await webflow.forms.listSubmissions(form.id!);
for (const sub of formSubmissions || []) {
const formData = sub.formData || {};
// Check all fields for matching emailconst hasEmail = Object.values(formData).some(
v =>typeof v === "string" && v.toLowerCase() === userEmail.toLowerCase()
);
if (hasEmail) {
exportData.data.formSubmissions.push({
formName: form.displayName!,
submittedAt: sub.submittedAt!,
data: formData,
});
}
}
}
// 2. Find orders by emailconst { orders } = await webflow.orders.list(siteId);
for (const order of orders || []) {
if (order.customerInfo?.email?.toLowerCase() === userEmail.toLowerCase()) {
exportData.data.orders.push({
orderId: order.orderId!,
status: order.status!,
total: (order.customerPaid?.value || 0) / 100,
items: order.purchasedItems?.map(i => i.productName || "Unknown") || [],
});
}
}
return exportData;
}
Step 5: GDPR — Right to Deletion
asyncfunctiondeleteUserData(siteId: string,
userEmail: string): Promise<{ deleted: string[]; retained: string[] }> {
const result = { deleted: [] asstring[], retained: [] asstring[] };
// Note: Webflow API does not currently support deleting form submissions// via API. You must delete them through the Webflow dashboard.// However, you can delete your local copies:// 1. Delete local form submission copiesawait db.formSubmissions.deleteMany({ email: userEmail, source: "webflow" });
result.deleted.push("Local form submission copies");
// 2. Delete local order copies (keep anonymized for accounting)await db.orders.updateMany(
{ email: userEmail, source: "webflow" },
{ $set: { email: "[DELETED]", name: "[DELETED]", address: "[DELETED]" } }
);
result.retained.push("Anonymized order records (legal requirement)");
// 3. Audit log (required — never delete audit logs)await db.auditLog.insertOne({
action: "GDPR_DELETION",
email: userEmail,
service: "webflow",
timestamp: newDate(),
deletedSources: result.deleted,
retainedSources: result.retained,
});
result.retained.push("Audit log entry");
return result;
}