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 * 60seconds). - Attributes: first-party,
httpOnly,SameSite=Lax,Securein production; path/; host-only (no cross-site tracking domain). - Value: signed payload containing referral code, timestamps, and source (
linkorlanding_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.
| What | Whose | Collected by | Stored where | Shared with | Why | ShootPortal sees? |
|---|---|---|---|---|---|---|
| Account email, name, password hash / OAuth identity | Tenant admin, Client, Partner, platform admin | ShootPortal / Supabase Auth / Google (OAuth) | Supabase Auth + profiles | Supabase; Google (OAuth only) | Sign-in, roles, routing | Yes (email/name/role; not Google refresh tokens in app tables) |
| Business profile, branding, billing contact | Tenant | Tenant admin | Postgres (businesses, app_settings) | Vercel/Supabase infra | Operate Tenant workspace | Yes |
| Client PII (name, email, phone, company, address fields) | Client | Tenant (ShootPortal as processor) | Postgres (clients, projects) | Optional GHL webhook if Tenant enables | Projects / CRM | Yes (as processor) |
| Project media (photos, video, docs, 360) | Client / Tenant subjects | Tenant | Supabase Storage / object storage | Storage provider | Delivery / review | Yes (as processor) |
| Card numbers / payment methods (Client→Tenant; Tenant→ShootPortal) | Client / Tenant | Stripe | Stripe | Stripe | Charges / subscriptions | No full PANs — status/amount/ids only |
| Partner bank account, tax ID/SSN, W-9/W-8, 1099 payloads | Partner | Stripe (hosted Express onboarding) | Stripe only | Stripe | KYC / tax / payouts | No — never received or stored by ShootPortal |
| Partner Connect status (acct id, flags, requirement key names) | Partner | Stripe Account API → ShootPortal | partners.stripe_connect_* | Stripe | Payout eligibility UI | Yes (status only) |
| Commission ledger & transfer ids | Partner | ShootPortal | partner_commissions, partner_payouts, run tables | Stripe (Transfers API) | Pay commissions | Yes |
| sp_partner_ref cookie | Visitor → prospective Tenant | ShootPortal (apex) | Browser cookie (90 days) | — | Referral attribution | Yes (reads signed code; writes partner_referrals on signup) |
| Transactional email content + recipient | All user types | ShootPortal | Resend; optional email_events | Resend | Notify / deliver | Yes |
| Web push subscription id | Tenant admin | OneSignal + ShootPortal | profiles.onesignal_subscription_id | OneSignal | Admin notifications | Yes |
| Platform audit (actor email, IP, action metadata) | Platform operators / targets | ShootPortal | platform_audit_log | — | Security / compliance | Yes |
| Impersonation session cookie | Platform super-admin | ShootPortal | httpOnly cookie (short TTL) | — | Support / debugging | Yes (audited) |