Legal

Privacy Policy

Last updated: August 27, 2026

This policy describes how ShootPortal (“we,” “us”) handles information when you use shootportal.app and related services. It is a starting point for legal review — not a substitute for advice from your counsel. ShootPortal stores third-party client personal data and media on behalf of media businesses and participates in payment flows; treat those obligations seriously.

Attorney review map (August 27, 2026)

  • Sections marked NEW or CHANGED contain code-derived facts / structure only — not polished legal prose.
  • Unmarked sections are prior draft text and remain unreviewed unless counsel says otherwise.
  • Full data-flow inventory for counsel is summarized in §15 and in docs/LAUNCH-CHECKLIST.md §1b.

1. Who we are and rolesCHANGED — AWAITING ATTORNEY REVIEW

ShootPortal provides software for media businesses (photographers, videographers, drone operators, real estate media companies, and similar studios). When a business (“Tenant”) uses ShootPortal to serve its customers (“Clients”), ShootPortal typically acts as a processor (or service provider) for Client personal data and media that the Tenant uploads or collects. The Tenant is the controller (or business) for that Client data. For Tenant account data (admins, billing contacts), ShootPortal acts as a controller.

Partners (referral program): individuals or brands who refer new Tenants and may receive commission payouts. Partner account data is collected by ShootPortal as controller for the partner program. Sensitive payout KYC (bank / tax) is collected by Stripe during hosted Express onboarding — see §4b.

2. Data we collectCHANGED — AWAITING ATTORNEY REVIEW

From Tenants / business users: name, email, password (hashed via our auth provider), business profile (name, logo, branding, contact details, address), plan and subscription status, team member accounts, support messages, and usage logs needed to operate the service.

From Clients (on behalf of Tenants): name, email, phone, company, property/project details, messages, estimate and payment records, review feedback, and media files (photos, video, documents, 360 content) uploaded to projects.

From Partners: application and account fields (name, email, brand name, website, social links, audience/promotion description as submitted), referral code, commission rate, status, notes (platform-admin), Connect account status identifiers (not bank/tax secrets — §4b), landing-page content they configure, and payout/commission ledger records (amounts, period, Stripe transfer id).

Automatically: device/browser information, IP address, approximate location derived from IP, cookies or similar technologies for authentication and security, diagnostic logs, and (where used) the first-party referral attribution cookie described in §2b.

Sign-in via Google (OAuth): when a user chooses Google sign-in (Tenant admin, Client, Partner, or platform admin on an allowed host), Google authenticates the user through our auth provider (Supabase). We receive identity needed to create/link a session (typically email and display name). We do not use Google Calendar or other Google product APIs.

2b. Referral attribution cookie (sp_partner_ref)NEW — AWAITING ATTORNEY REVIEW

Facts from product code (counsel to convert into policy language):

  • Name: sp_partner_ref
  • Purpose: attribute a new Tenant signup to a Partner referral code or partner landing page so commission / referral-discount logic can run.
  • Lifetime: 90 days (90 * 24 * 60 * 60 seconds).
  • Attributes: first-party, httpOnly, SameSite=Lax, Secure in production; path /; host-only (no cross-site tracking domain).
  • Value: signed payload containing referral code, timestamps, and source (link or landing_page) — not a browsing profile.
  • Set on: platform apex when visitor uses ?ref= or an active partner landing slug. Not set on Tenant custom domains.
  • Prior §2 “cookies … for authentication and security” language does not specifically disclose this 90-day attribution cookie.

3. Media storage and retention

Project media is stored in object storage associated with the Tenant’s workspace. Retention follows the Tenant’s use of the product and plan storage limits. When a Tenant deletes media, projects, or their business account, we remove or schedule removal of associated objects according to our deletion processes, subject to backups and legal holds. Tenants should not upload media they are not authorized to process.

4. Payments — Stripe and Stripe Connect (Tenants)CHANGED — AWAITING ATTORNEY REVIEW

Scope of this section: Tenant subscription billing to ShootPortal, and Tenant→Client project payments via the Tenant’s Stripe Connect account.

Payment processing is provided by Stripe. Client card data is handled by Stripe; we do not store full card numbers on ShootPortal servers. For Tenant payouts of Client charges, we use Stripe Connect (Tenant connected accounts). Stripe’s privacy documentation applies to payment data they process. We store payment status, amounts, and identifiers needed for project accounting.

Partner commission payouts use a separate Stripe Express flow — see §4b (not covered by the paragraph above).

4b. Partner payouts — Stripe ExpressNEW — AWAITING ATTORNEY REVIEW

Facts from product code (counsel to convert into policy language):

  • Partners who receive commissions onboard a Stripe Express connected account via Stripe-hosted Account Links (account_onboarding). ShootPortal does not embed bank-detail or tax-ID forms in-app.
  • ShootPortal does not receive or store partner bank account numbers, routing numbers, Social Security numbers, TINs, W-9/W-8 form contents, or 1099 filing payloads. Those are collected and held by Stripe during Express onboarding / Stripe tax products. Code comment and behavior: “we never collect TINs in-app.”
  • ShootPortal does store Connect operational fields only: Express account id (acct_…), status enums, payouts-enabled flag, details-submitted flag, whether requirements are due, a short summary of Stripe requirement key names (not the underlying secrets), Connect mode (test/live), and connected-at timestamps.
  • Payouts are Stripe Transfers to the partner’s Express account id. ShootPortal stores ledger rows (commission amounts, hold/payable dates, reversals on refunds), payout records (amount, Stripe transfer id as reference), and run audit metadata — not bank credentials.
  • Platform operators may see Connect status and requirement key summaries in the admin console; they do not see bank or tax identifiers through ShootPortal.

5. Email — ResendCHANGED — AWAITING ATTORNEY REVIEW

Transactional and notification email (estimates, messages, reminders, account mail, partner lifecycle and payout notices) is sent via Resend. Message content and recipient addresses necessary to deliver mail are processed by Resend under their terms. Platform-owned mail uses ShootPortal sending domains; Tenant-branded content may appear in message bodies. Delivery events (e.g. open/click/bounce) may be stored for product diagnostics when webhooks are configured.

6. SubprocessorsCHANGED — AWAITING ATTORNEY REVIEW

We use reputable infrastructure providers to run the product, including:

  • Supabase — authentication, database, and file storage
  • Vercel — application hosting, edge delivery, and custom-domain APIs
  • Stripe — Tenant billing, Tenant Connect (Client charges), Partner Express accounts and commission transfers
  • Resend — transactional email
  • Google — OAuth sign-in only (identity provider via Supabase Auth). Not used for Calendar or other Google Workspace APIs.
  • OneSignal — optional web push notifications for subscribed Tenant admins (subscription id stored on the admin profile)

Tenant-configured outbound (not a platform-wide subprocessor by default): GoHighLevel — if a Tenant enables a GHL webhook, Client lead fields the Tenant already holds may be sent to that Tenant’s GHL endpoint.

Removed / not in use: Google Calendar sync (previously present; not in current product code).

We may update this list as providers change. Material changes will be reflected in this policy.

7. How we use information

We use data to provide and secure the service, authenticate users, send product/transactional communications, process payments, prevent abuse, improve reliability, and comply with law. We do not sell personal information.

8. Sharing

We share data with subprocessors under contract, with Tenants regarding their own workspace, with Stripe for payments, and when required by law or to protect rights and safety. Client data belonging to a Tenant is not shared with other Tenants.

9. Deletion and export requestsCHANGED — AWAITING ATTORNEY REVIEW

Tenants: may export project/client records and download media they control, and may request account closure via support@shootportal.app.

Clients: should contact the Tenant that collected their data. ShootPortal can assist Tenants with deletion/export technical requests. Individuals may also contact us at support@shootportal.app; we may redirect Client requests to the relevant Tenant when we act as processor.

Partners: may request account/export/deletion guidance via support@shootportal.app. Payout KYC held by Stripe must be handled under Stripe’s processes.

10. Security

We use industry-standard controls including encrypted transport (HTTPS), access controls, tenant isolation in application data access, and hashed credentials via our auth provider. No method of transmission or storage is 100% secure.

11. International transfers

Infrastructure may process data in the United States and other regions where our providers operate. Where required, we rely on appropriate transfer mechanisms.

12. Children

The service is not directed to children under 16. We do not knowingly collect personal information from children.

13. Changes

We may update this policy. The “Last updated” date will change when we post revisions. Continued use after changes constitutes acceptance where permitted by law.

14. Contact

Privacy questions: support@shootportal.app

15. Code-derived data flow inventory (for counsel)NEW — AWAITING ATTORNEY REVIEW

Compact inventory of personal-data categories the product touches. “ShootPortal sees?” means stored or processed in ShootPortal-controlled systems (DB, object storage, logs), not merely passed through a third party’s hosted UI.

WhatWhoseCollected byStored whereShared withWhyShootPortal sees?
Account email, name, password hash / OAuth identityTenant admin, Client, Partner, platform adminShootPortal / Supabase Auth / Google (OAuth)Supabase Auth + profilesSupabase; Google (OAuth only)Sign-in, roles, routingYes (email/name/role; not Google refresh tokens in app tables)
Business profile, branding, billing contactTenantTenant adminPostgres (businesses, app_settings)Vercel/Supabase infraOperate Tenant workspaceYes
Client PII (name, email, phone, company, address fields)ClientTenant (ShootPortal as processor)Postgres (clients, projects)Optional GHL webhook if Tenant enablesProjects / CRMYes (as processor)
Project media (photos, video, docs, 360)Client / Tenant subjectsTenantSupabase Storage / object storageStorage providerDelivery / reviewYes (as processor)
Card numbers / payment methods (Client→Tenant; Tenant→ShootPortal)Client / TenantStripeStripeStripeCharges / subscriptionsNo full PANs — status/amount/ids only
Partner bank account, tax ID/SSN, W-9/W-8, 1099 payloadsPartnerStripe (hosted Express onboarding)Stripe onlyStripeKYC / tax / payoutsNo — never received or stored by ShootPortal
Partner Connect status (acct id, flags, requirement key names)PartnerStripe Account API → ShootPortalpartners.stripe_connect_*StripePayout eligibility UIYes (status only)
Commission ledger & transfer idsPartnerShootPortalpartner_commissions, partner_payouts, run tablesStripe (Transfers API)Pay commissionsYes
sp_partner_ref cookieVisitor → prospective TenantShootPortal (apex)Browser cookie (90 days)—Referral attributionYes (reads signed code; writes partner_referrals on signup)
Transactional email content + recipientAll user typesShootPortalResend; optional email_eventsResendNotify / deliverYes
Web push subscription idTenant adminOneSignal + ShootPortalprofiles.onesignal_subscription_idOneSignalAdmin notificationsYes
Platform audit (actor email, IP, action metadata)Platform operators / targetsShootPortalplatform_audit_log—Security / complianceYes
Impersonation session cookiePlatform super-adminShootPortalhttpOnly cookie (short TTL)—Support / debuggingYes (audited)