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".
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
A direct command skips the review prompt. Inspect the source before running it.
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;
}