diff --git a/apps/www/_go/events/select-2026/partner-day-thank-you.tsx b/apps/www/_go/events/select-2026/partner-day-thank-you.tsx
new file mode 100644
index 00000000000..ddb582d94f7
--- /dev/null
+++ b/apps/www/_go/events/select-2026/partner-day-thank-you.tsx
@@ -0,0 +1,34 @@
+import type { GoPageInput } from 'marketing'
+import Link from 'next/link'
+import { Button } from 'ui'
+
+const page: GoPageInput = {
+ template: 'thank-you',
+ slug: 'select-2026/partner-day/thank-you',
+ metadata: {
+ title: "You're confirmed | Supabase Partner Day",
+ description:
+ 'Your RSVP for Supabase Partner Day in San Francisco on October 1, 2026 has been confirmed. We look forward to seeing you.',
+ },
+ hero: {
+ title: "You're confirmed",
+ description:
+ "We'll see you at Supabase Partner Day in San Francisco on October 1, 2026. We're looking forward to it.",
+ },
+ sections: [
+ {
+ type: 'single-column',
+ title: 'In the meantime',
+ description: 'Learn more about what we are building at Supabase.',
+ children: (
+
+
+ Visit supabase.com
+
+
+ ),
+ },
+ ],
+}
+
+export default page
diff --git a/apps/www/_go/events/select-2026/partner-day.tsx b/apps/www/_go/events/select-2026/partner-day.tsx
new file mode 100644
index 00000000000..ca3375ca1aa
--- /dev/null
+++ b/apps/www/_go/events/select-2026/partner-day.tsx
@@ -0,0 +1,241 @@
+import type { GoPageInput } from 'marketing'
+
+const agenda: { time: string; session: string; notes?: string }[] = [
+ {
+ time: '2:00 - 2:30pm',
+ session: 'Arrival + light snacks',
+ notes: 'Casual opportunity to meet your fellow partners',
+ },
+ {
+ time: '2:30 - 2:45pm',
+ session: 'Welcome',
+ notes: 'Ecosystem momentum and why partners are so critical to the success of Supabase.',
+ },
+ {
+ time: '2:45 - 3:15pm',
+ session: 'Business update + Roadmap preview',
+ notes: 'An early look at what\u2019s coming at Select',
+ },
+ {
+ time: '3:15 - 3:45pm',
+ session: 'Partner demos / \u201cwins\u201d',
+ notes: 'Demos by some partners on what they\u2019ve built / building.',
+ },
+ {
+ time: '3:45 - 4:15pm',
+ session: 'Partner panel',
+ notes: 'Challenges and opportunities for partners in the Supabase ecosystem.',
+ },
+ {
+ time: '4:15 - 4:30pm',
+ session: 'Ecosystem announcements roundup + partner awards',
+ notes: 'Celebrate the organizations that have delivered innovative results through the year.',
+ },
+ {
+ time: '4:30pm and beyond',
+ session: 'Happy hour',
+ },
+]
+
+const page: GoPageInput = {
+ template: 'lead-gen',
+ slug: 'select-2026/partner-day',
+ metadata: {
+ title: 'Partner Day | Supabase Select 2026',
+ description:
+ 'Join the Supabase partner community for an afternoon of business updates, partner demos, panels, and ecosystem announcements, followed by a happy hour.',
+ },
+ hero: {
+ title: 'Supabase Partner Day',
+ subtitle: 'Celebrating the Supabase ecosystem',
+ description:
+ 'Spend the afternoon with the Supabase team and fellow partners. Hear a business update and roadmap preview, watch lightning demos of what partners are building, join a partner panel, and celebrate the latest ecosystem announcements and partner awards -- capped off with a happy hour.',
+ ctas: [
+ {
+ label: 'Reserve your spot',
+ href: '#rsvp',
+ variant: 'primary',
+ },
+ ],
+ },
+ sections: [
+ {
+ type: 'single-column',
+ title: 'Details',
+ children: (
+
+
Date
+
October 1, 2026
+
Location
+
San Francisco, CA
+
Schedule
+
2:00 PM — Arrival and light snacks
+
4:30 PM — Happy hour
+
+ ),
+ },
+ {
+ type: 'single-column',
+ title: 'Agenda',
+ children: (
+
+
+
+
+ Time
+ Session
+ Notes
+
+
+
+ {agenda.map((item, index) => (
+ 0 ? 'border-t border-muted' : undefined}>
+
+ {item.time}
+
+ {item.session}
+ {item.notes ?? ''}
+
+ ))}
+
+
+
+ ),
+ },
+ {
+ type: 'feature-grid',
+ title: "What you'll gain",
+ columns: 3,
+ items: [
+ {
+ title: 'Strengthen key relationships',
+ description:
+ "Join Supabase's inaugural Partner Summit and build deeper connections with the Supabase team and the wider partner community in one room.",
+ },
+ {
+ title: 'Get recognized for your work',
+ description:
+ 'Top-performing partners are celebrated with Partner Awards, recognizing your impact across product integrations and go-to-market.',
+ },
+ {
+ title: 'See where Supabase is heading',
+ description:
+ 'Get a business update and an early look at the product roadmap, giving you forward-looking context to plan your own bets.',
+ },
+ {
+ title: 'Unlock new opportunities',
+ description:
+ 'Be first to hear about new partner programs, partner benefits, and product integration opportunities you can take advantage of.',
+ },
+ {
+ title: 'Shape the partnership',
+ description:
+ "Meet the team in person to share what's working, surface points of friction, and give feedback that directly informs how we collaborate.",
+ },
+ {
+ title: 'Grow your visibility',
+ description:
+ "Be part of the partner ecosystem spotlight and get featured across Supabase's social channels.",
+ },
+ ],
+ },
+ {
+ type: 'form',
+ id: 'rsvp',
+ title: 'Reserve your spot',
+ description: "Space is limited. Let us know you're coming.",
+ fields: [
+ {
+ type: 'text',
+ name: 'first_name',
+ label: 'First Name',
+ placeholder: 'First Name',
+ required: true,
+ half: true,
+ },
+ {
+ type: 'text',
+ name: 'last_name',
+ label: 'Last Name',
+ placeholder: 'Last Name',
+ required: true,
+ half: true,
+ },
+ {
+ type: 'email',
+ name: 'email_address',
+ label: 'Email',
+ placeholder: 'Work email',
+ required: true,
+ },
+ {
+ type: 'text',
+ name: 'company_name',
+ label: 'Company',
+ placeholder: 'ACME, Inc.',
+ required: true,
+ },
+ {
+ type: 'text',
+ name: 'job_title',
+ label: 'Job Title',
+ placeholder: 'Head of Partnerships',
+ required: false,
+ },
+ {
+ type: 'text',
+ name: 'phone_number',
+ label: 'Phone Number',
+ placeholder: '+1 212 555 1212',
+ required: false,
+ },
+ {
+ type: 'select',
+ name: 'attending',
+ label: 'Are you attending Select 2026?',
+ placeholder: 'Select an option',
+ required: true,
+ options: [
+ { label: 'Yes', value: 'Yes' },
+ { label: 'No', value: 'No' },
+ ],
+ },
+ ],
+ submitLabel: 'Confirm RSVP',
+ successRedirect: '/go/select-2026/partner-day/thank-you',
+ disclaimer:
+ 'By submitting this form, I confirm that I have read and understood the [Privacy Policy](https://supabase.com/privacy).',
+ crm: {
+ hubspot: {
+ formGuid: 'a6e8cf87-5fd0-4ed0-acce-60e37447fb23',
+ fieldMap: {
+ first_name: 'firstname',
+ last_name: 'lastname',
+ email_address: 'email',
+ company_name: 'company',
+ job_title: 'jobtitle',
+ phone_number: 'phone',
+ },
+ // `attending` is a Notion-only field — keep it out of the HubSpot payload.
+ excludeFields: ['attending'],
+ consent:
+ 'By submitting this form, I confirm that I have read and understood the Privacy Policy.',
+ },
+ notion: {
+ database_id: '37d5004b775f80e48618c7ac1013c889',
+ columnMap: {
+ first_name: 'First Name',
+ last_name: 'Last Name',
+ email_address: 'Email',
+ company_name: 'Company',
+ job_title: 'Job Title',
+ phone_number: 'Phone Number',
+ attending: 'Attending',
+ },
+ },
+ },
+ },
+ ],
+}
+
+export default page
diff --git a/apps/www/_go/events/select-2026/vip-dinner-thank-you.tsx b/apps/www/_go/events/select-2026/vip-dinner-thank-you.tsx
new file mode 100644
index 00000000000..26db2d8d7e3
--- /dev/null
+++ b/apps/www/_go/events/select-2026/vip-dinner-thank-you.tsx
@@ -0,0 +1,34 @@
+import type { GoPageInput } from 'marketing'
+import Link from 'next/link'
+import { Button } from 'ui'
+
+const page: GoPageInput = {
+ template: 'thank-you',
+ slug: 'select-2026/vip-dinner/thank-you',
+ metadata: {
+ title: "You're confirmed | Supabase VIP Dinner",
+ description:
+ 'Your RSVP for the Supabase VIP dinner at Flour + Water in San Francisco on October 1, 2026 has been confirmed. Cocktails begin at 7:00 PM and dinner starts at 7:30 PM.',
+ },
+ hero: {
+ title: "You're confirmed",
+ description:
+ "We'll see you at Flour + Water in San Francisco on October 1, 2026. Cocktails begin at 7:00 PM and dinner starts at 7:30 PM. We look forward to seeing you.",
+ },
+ sections: [
+ {
+ type: 'single-column',
+ title: 'In the meantime',
+ description: 'Learn more about what we are building at Supabase.',
+ children: (
+
+
+ Visit supabase.com
+
+
+ ),
+ },
+ ],
+}
+
+export default page
diff --git a/apps/www/_go/events/select-2026/vip-dinner.tsx b/apps/www/_go/events/select-2026/vip-dinner.tsx
new file mode 100644
index 00000000000..2165bf8afc9
--- /dev/null
+++ b/apps/www/_go/events/select-2026/vip-dinner.tsx
@@ -0,0 +1,194 @@
+import type { GoPageInput } from 'marketing'
+import Image from 'next/image'
+import { cn } from 'ui'
+
+import authors from '@/lib/authors.json'
+
+const sugu = authors.find((a) => a.author_id === 'sugu_sougoumarane')
+const paul = authors.find((a) => a.author_id === 'paul_copplestone')
+const ant = authors.find((a) => a.author_id === 'ant_wilson')
+const deepthi = authors.find((a) => a.author_id === 'deepthi_sigireddi')
+
+const hosts = [paul, ant, sugu, deepthi]
+
+const page: GoPageInput = {
+ template: 'lead-gen',
+ slug: 'select-2026/vip-dinner',
+ metadata: {
+ title: 'VIP Dinner | Supabase Select 2026',
+ description:
+ 'Join Supabase leaders for an intimate dinner at Flour + Water in San Francisco on October 1, 2026. Cocktails at 7:00 PM, dinner at 7:30 PM.',
+ },
+ hero: {
+ title: 'The future of scalable databases',
+ subtitle: 'An intimate VIP dinner hosted by Supabase',
+ description:
+ 'Join Supabase product and engineering leaders for a dinner conversation about where Postgres is headed -- from scaling beyond single-node limits to managing globally distributed workloads. Expect sharp perspectives, good food, and the opportunity to connect with other engineering leaders.',
+ image: {
+ src: '/images/landing-pages/select-2026/flourwater.jpg',
+ alt: 'Private dining room at Flour + Water, San Francisco',
+ width: 600,
+ height: 450,
+ },
+ ctas: [
+ {
+ label: 'Reserve your seat',
+ href: '#rsvp',
+ variant: 'primary',
+ },
+ ],
+ },
+ sections: [
+ {
+ type: 'single-column',
+ title: 'Details',
+ children: (
+
+
Date
+
October 1, 2026
+
Location
+
Flour + Water
+
San Francisco, CA
+
Schedule
+
7:00 PM — Cocktails and introductions
+
7:30 PM — Dinner and discussion
+
+ ),
+ },
+ {
+ type: 'single-column',
+ title: 'Your hosts',
+ children: (
+
+
+ {hosts.map((host, i) => (
+
+ {host?.author_image_url && (
+
+ )}
+
+
{host?.author}
+
+ {host?.position && `${host.position}, `}Supabase
+
+
+
+ ))}
+
+
+ ),
+ },
+ {
+ type: 'form',
+ id: 'rsvp',
+ title: 'Reserve your seat',
+ description: "Space is limited. Let us know you're coming.",
+ fields: [
+ {
+ type: 'text',
+ name: 'first_name',
+ label: 'First Name',
+ placeholder: 'First Name',
+ required: true,
+ half: true,
+ },
+ {
+ type: 'text',
+ name: 'last_name',
+ label: 'Last Name',
+ placeholder: 'Last Name',
+ required: true,
+ half: true,
+ },
+ {
+ type: 'email',
+ name: 'email_address',
+ label: 'Email',
+ placeholder: 'Work email',
+ required: true,
+ },
+ {
+ type: 'text',
+ name: 'company_name',
+ label: 'Company',
+ placeholder: 'ACME, Inc.',
+ required: true,
+ },
+ {
+ type: 'text',
+ name: 'job_title',
+ label: 'Job Title',
+ placeholder: 'VP of Engineering',
+ required: false,
+ },
+ {
+ type: 'text',
+ name: 'phone_number',
+ label: 'Phone Number',
+ placeholder: '+1 212 555 1212',
+ required: false,
+ },
+ {
+ type: 'select',
+ name: 'attending',
+ label: 'Are you attending Select 2026?',
+ placeholder: 'Select an option',
+ required: true,
+ options: [
+ { label: 'Yes', value: 'Yes' },
+ { label: 'No', value: 'No' },
+ ],
+ },
+ ],
+ submitLabel: 'Confirm RSVP',
+ successRedirect: '/go/select-2026/vip-dinner/thank-you',
+ disclaimer:
+ 'By submitting this form, I confirm that I have read and understood the [Privacy Policy](https://supabase.com/privacy).',
+ crm: {
+ hubspot: {
+ formGuid: 'd0699f2e-225a-4224-91b5-341fb5336613',
+ fieldMap: {
+ first_name: 'firstname',
+ last_name: 'lastname',
+ email_address: 'email',
+ company_name: 'company',
+ job_title: 'jobtitle',
+ phone_number: 'phone',
+ },
+ // `attending` is a Notion-only field — keep it out of the HubSpot payload.
+ excludeFields: ['attending'],
+ consent:
+ 'By submitting this form, I confirm that I have read and understood the Privacy Policy.',
+ },
+ notion: {
+ database_id: '37d5004b775f809e8cc4e29fdec302aa',
+ columnMap: {
+ first_name: 'First Name',
+ last_name: 'Last Name',
+ email_address: 'Email',
+ company_name: 'Company',
+ job_title: 'Job Title',
+ phone_number: 'Phone Number',
+ attending: 'Attending',
+ },
+ },
+ },
+ },
+ ],
+}
+
+export default page
diff --git a/apps/www/_go/events/select-2026/vip-experience-thank-you.tsx b/apps/www/_go/events/select-2026/vip-experience-thank-you.tsx
new file mode 100644
index 00000000000..50854651cd4
--- /dev/null
+++ b/apps/www/_go/events/select-2026/vip-experience-thank-you.tsx
@@ -0,0 +1,34 @@
+import type { GoPageInput } from 'marketing'
+import Link from 'next/link'
+import { Button } from 'ui'
+
+const page: GoPageInput = {
+ template: 'thank-you',
+ slug: 'select-2026/vip-experience/thank-you',
+ metadata: {
+ title: "You're confirmed | Supabase VIP Experience",
+ description:
+ 'Your RSVP for the Supabase VIP dinner at Penny Roma in San Francisco on October 1, 2026 has been confirmed. Cocktails begin at 7:00 PM and dinner starts at 7:30 PM.',
+ },
+ hero: {
+ title: "You're confirmed",
+ description:
+ "We'll see you at Penny Roma in San Francisco on October 1, 2026. Cocktails begin at 7:00 PM and dinner starts at 7:30 PM. We look forward to seeing you.",
+ },
+ sections: [
+ {
+ type: 'single-column',
+ title: 'In the meantime',
+ description: 'Learn more about what we are building at Supabase.',
+ children: (
+
+
+ Visit supabase.com
+
+
+ ),
+ },
+ ],
+}
+
+export default page
diff --git a/apps/www/_go/events/select-2026/vip-experience.tsx b/apps/www/_go/events/select-2026/vip-experience.tsx
new file mode 100644
index 00000000000..a51eadb4d56
--- /dev/null
+++ b/apps/www/_go/events/select-2026/vip-experience.tsx
@@ -0,0 +1,214 @@
+import type { GoPageInput } from 'marketing'
+import Image from 'next/image'
+
+import authors from '@/lib/authors.json'
+
+const sugu = authors.find((a) => a.author_id === 'sugu_sougoumarane')
+const paul = authors.find((a) => a.author_id === 'paul_copplestone')
+const ant = authors.find((a) => a.author_id === 'ant_wilson')
+
+const page: GoPageInput = {
+ template: 'lead-gen',
+ slug: 'select-2026/vip-experience',
+ metadata: {
+ title: 'VIP Experience | Supabase Select 2026',
+ description:
+ 'Join Supabase leaders for an intimate VIP dinner at Penny Roma in San Francisco on October 1, 2026. Cocktails at 7:00 PM, dinner at 7:30 PM.',
+ },
+ hero: {
+ title: 'The future of scalable databases',
+ subtitle: 'An intimate VIP experience hosted by Supabase',
+ description:
+ 'Join Supabase product and engineering leaders for a dinner conversation about where Postgres is headed -- from scaling beyond single-node limits to managing globally distributed workloads. Expect sharp perspectives, good food, and the opportunity to connect with other engineering leaders.',
+ image: {
+ src: '/images/landing-pages/select-2026/pennyroma.jpg',
+ alt: 'Private dining room at Penny Roma, San Francisco',
+ width: 600,
+ height: 450,
+ },
+ ctas: [
+ {
+ label: 'Reserve your seat',
+ href: '#rsvp',
+ variant: 'primary',
+ },
+ ],
+ },
+ sections: [
+ {
+ type: 'single-column',
+ title: 'Details',
+ children: (
+
+
Date
+
October 1, 2026
+
Location
+
Penny Roma
+
San Francisco, CA
+
Schedule
+
7:00 PM — Cocktails and introductions
+
7:30 PM — Dinner and discussion
+
+ ),
+ },
+ {
+ type: 'single-column',
+ title: 'Your hosts',
+ children: (
+
+
+
+ {sugu?.author_image_url && (
+
+ )}
+
+
{sugu?.author}
+
+ {sugu?.position && `${sugu.position}, `}Supabase
+
+
+
+
+ {paul?.author_image_url && (
+
+ )}
+
+
{paul?.author}
+
+ {paul?.position && `${paul.position}, `}Supabase
+
+
+
+
+ {ant?.author_image_url && (
+
+ )}
+
+
{ant?.author}
+
+ {ant?.position && `${ant.position}, `}Supabase
+
+
+
+
+
+ ),
+ },
+ {
+ type: 'form',
+ id: 'rsvp',
+ title: 'Reserve your seat',
+ description: "Space is limited. Let us know you're coming.",
+ fields: [
+ {
+ type: 'text',
+ name: 'first_name',
+ label: 'First Name',
+ placeholder: 'First Name',
+ required: true,
+ half: true,
+ },
+ {
+ type: 'text',
+ name: 'last_name',
+ label: 'Last Name',
+ placeholder: 'Last Name',
+ required: true,
+ half: true,
+ },
+ {
+ type: 'email',
+ name: 'email_address',
+ label: 'Email',
+ placeholder: 'Work email',
+ required: true,
+ },
+ {
+ type: 'text',
+ name: 'company_name',
+ label: 'Company',
+ placeholder: 'ACME, Inc.',
+ required: true,
+ },
+ {
+ type: 'text',
+ name: 'job_title',
+ label: 'Job Title',
+ placeholder: 'VP of Engineering',
+ required: false,
+ },
+ {
+ type: 'text',
+ name: 'phone_number',
+ label: 'Phone Number',
+ placeholder: '+1 212 555 1212',
+ required: false,
+ },
+ {
+ type: 'select',
+ name: 'attending',
+ label: 'Are you attending Select 2026?',
+ placeholder: 'Select an option',
+ required: true,
+ options: [
+ { label: 'Yes', value: 'Yes' },
+ { label: 'No', value: 'No' },
+ ],
+ },
+ ],
+ submitLabel: 'Confirm RSVP',
+ successRedirect: '/go/select-2026/vip-experience/thank-you',
+ disclaimer:
+ 'By submitting this form, I confirm that I have read and understood the [Privacy Policy](https://supabase.com/privacy).',
+ crm: {
+ hubspot: {
+ formGuid: '3803133e-fbc9-4850-80b5-987b57cf0e8a',
+ fieldMap: {
+ first_name: 'firstname',
+ last_name: 'lastname',
+ email_address: 'email',
+ company_name: 'company',
+ job_title: 'jobtitle',
+ phone_number: 'phone',
+ },
+ // `attending` is a Notion-only field — keep it out of the HubSpot payload.
+ excludeFields: ['attending'],
+ consent:
+ 'By submitting this form, I confirm that I have read and understood the Privacy Policy.',
+ },
+ notion: {
+ database_id: '37d5004b775f80f4b050fd6385736010',
+ columnMap: {
+ first_name: 'First Name',
+ last_name: 'Last Name',
+ email_address: 'Email',
+ company_name: 'Company',
+ job_title: 'Job Title',
+ phone_number: 'Phone Number',
+ attending: 'Attending',
+ },
+ },
+ },
+ },
+ ],
+}
+
+export default page
diff --git a/apps/www/_go/index.tsx b/apps/www/_go/index.tsx
index 627d0d2ca9a..8f4b1d5672f 100644
--- a/apps/www/_go/index.tsx
+++ b/apps/www/_go/index.tsx
@@ -10,6 +10,12 @@ import pgconfDev2026Contest from './events/pgconf-dev-2026/contest'
import pgconfDev2026ContestThankYou from './events/pgconf-dev-2026/contest-thank-you'
import postgresconfContest from './events/postgresconf-sjc-2026/contest'
import postgresconfContestThankYou from './events/postgresconf-sjc-2026/contest-thank-you'
+import selectPartnerDay from './events/select-2026/partner-day'
+import selectPartnerDayThankYou from './events/select-2026/partner-day-thank-you'
+import selectVipDinner from './events/select-2026/vip-dinner'
+import selectVipDinnerThankYou from './events/select-2026/vip-dinner-thank-you'
+import selectVipExperience from './events/select-2026/vip-experience'
+import selectVipExperienceThankYou from './events/select-2026/vip-experience-thank-you'
import startupGrindContest from './events/startup-grind-2026/contest'
import stripeSessionsContest from './events/stripe-sessions-2026/contest'
import stripeExecDinner from './events/stripe-sessions-2026/exec-dinner'
@@ -46,6 +52,12 @@ const pages: GoPageInput[] = [
datadogDinner, // remove after June 30, 2026
aiEngineerEuropeContest,
aiEngineerEuropeContestThankYou,
+ selectVipDinner, // remove after Select 2026
+ selectVipDinnerThankYou, // remove after Select 2026
+ selectVipExperience, // remove after Select 2026
+ selectVipExperienceThankYou, // remove after Select 2026
+ selectPartnerDay, // remove after Select 2026
+ selectPartnerDayThankYou, // remove after Select 2026
startupGrindContest, // remove after May 31, 2026
supabaseStripeProjects,
]
diff --git a/apps/www/public/images/landing-pages/select-2026/flourwater.jpg b/apps/www/public/images/landing-pages/select-2026/flourwater.jpg
new file mode 100644
index 00000000000..b8d846ba81d
Binary files /dev/null and b/apps/www/public/images/landing-pages/select-2026/flourwater.jpg differ
diff --git a/apps/www/public/images/landing-pages/select-2026/pennyroma.jpg b/apps/www/public/images/landing-pages/select-2026/pennyroma.jpg
new file mode 100644
index 00000000000..35a27f861f0
Binary files /dev/null and b/apps/www/public/images/landing-pages/select-2026/pennyroma.jpg differ
diff --git a/packages/marketing/src/go/actions/submitForm.ts b/packages/marketing/src/go/actions/submitForm.ts
index dddbc498b48..d3b1a84ab7b 100644
--- a/packages/marketing/src/go/actions/submitForm.ts
+++ b/packages/marketing/src/go/actions/submitForm.ts
@@ -217,8 +217,10 @@ export async function submitFormAction(
let consent: string | undefined
if (crm.hubspot) {
const fieldMap = crm.hubspot.fieldMap ?? {}
+ const excludeFields = new Set(crm.hubspot.excludeFields ?? [])
hubspotFields = {}
for (const [formField, value] of Object.entries(payloadValues)) {
+ if (excludeFields.has(formField)) continue
const hsField = fieldMap[formField] ?? formField
hubspotFields[hsField] = value
}
diff --git a/packages/marketing/src/go/schemas.ts b/packages/marketing/src/go/schemas.ts
index 77bfc038407..0323f0dcf4b 100644
--- a/packages/marketing/src/go/schemas.ts
+++ b/packages/marketing/src/go/schemas.ts
@@ -201,6 +201,14 @@ export const hubspotFormConfigSchema = z.object({
* Example: { workEmail: 'email', companyName: 'company' }
*/
fieldMap: z.record(z.string(), z.string()).optional(),
+ /**
+ * Form field `name`s to NOT forward to HubSpot. Use this for fields that
+ * should only reach another provider (e.g. Notion-only fields). By default
+ * every submitted field is sent to HubSpot, so an unmapped field a HubSpot
+ * form doesn't define would otherwise cause the whole submission to fail.
+ * Example: ['attending']
+ */
+ excludeFields: z.array(z.string()).optional(),
/** Legal consent text for GDPR. */
consent: z.string().optional(),
})