Home › Security

SocialScalr security and trust

Outbound LinkedIn activity is sensitive. The wrong tool can leak your LinkedIn cookie, your lead list, or your customer pipeline. Here is how SocialScalr is built so it doesn't.

By · Last reviewed · Contact: [email protected]

Transit
TLS 1.2+
All traffic between the browser, dashboard, API, and database is encrypted in transit.
At rest
AES-256 (AWS KMS)
Postgres storage volumes and S3 buckets are encrypted at rest with AWS-managed keys.
Auth
Supabase + TOTP 2FA
Industry-standard JWT auth; optional time-based one-time-password 2FA per user.
Authz
Postgres RLS
Row-level security policies in Postgres ensure users can only read their own rows.
Backups
Daily + PITR
Daily snapshots plus point-in-time recovery up to 7 days for paid plans.
Card data
Never stored
Square holds tokenized card data; SocialScalr never sees raw PANs.
LinkedIn creds
Never seen
Chrome extension runs inside your browser session; your LinkedIn cookie never leaves your device.
Bug bounty
$50 - $5,000
Tiered payouts for responsibly disclosed vulnerabilities.

Architecture in one paragraph

The dashboard is static HTML/JS served from Cloudflare Pages. API requests hit Cloudflare Pages Functions, which authenticate the Supabase JWT and call Postgres directly. Postgres enforces row-level-security policies that scope every row to its owning user or team. The Chrome extension runs inside the user's own LinkedIn browser session: it requests jobs from our API (authenticated with a user-specific API token), then performs the LinkedIn click/scroll/type inside the user's tab using DOM events. Your LinkedIn session cookie is never transmitted to SocialScalr.

What we store, what we don't

Data typeStored?Where
Account email, hashed passwordYesSupabase Auth (bcrypt-hashed, salted)
LinkedIn URLs of your leadsYesSupabase Postgres (RLS-scoped)
Connection note text and message text you sentYesSupabase Postgres
Your LinkedIn passwordNoNever collected
Your LinkedIn session cookieNoStays in your browser only
Raw card numbers (PANs)NoTokenized by Square
Card last-4 + brand + expiryYesSupabase Postgres (for receipts)
IP address of dashboard logins14 daysSupabase Auth logs (for fraud detection)
Server logs of API calls30 daysCloudflare Workers logs
Database backups30 daysAWS S3, encrypted

Row-level security (the most important table in this doc)

Every table holding customer data has a Postgres RLS policy. The shape is:

CREATE POLICY "owner_only_select" ON leads
  FOR SELECT
  USING (owner_id = auth.uid());

CREATE POLICY "owner_only_modify" ON leads
  FOR ALL
  USING  (owner_id = auth.uid())
  WITH CHECK (owner_id = auth.uid());

This means a SQL injection or a bug in our API code cannot leak data across customer accounts. Postgres itself refuses to return rows that don't match the requesting JWT's sub claim. Team-shared tables use a parallel team_member() security definer function.

Backups and disaster recovery

The Chrome extension - what it can and can't do

The extension manifest requests only the permissions it needs:

Source code of the extension is reviewed by the Chrome Web Store team on every submission and the manifest is public at chrome://extensions for any user to audit.

Account security features

GDPR and data rights

SocialScalr is operated by WETYR Corp, a US-registered entity. We are the data controller for account data and the data processor for outreach contact data you upload.

Sub-processors

SocialScalr uses these sub-processors to run the service. Full list, kept current:

Sub-processorPurposeRegion
SupabasePostgres database + AuthAWS US-East-2
CloudflarePages hosting + DDoS + WAFGlobal edge
SquareCard processing + recurring billingUS
ResendTransactional email (receipts, invites)US
AWSBackup storage (S3)US-West-2

Each is bound by a Data Processing Agreement. We notify customers at least 30 days before adding a new sub-processor.

Bug bounty

Responsible disclosure to [email protected]. Encrypt sensitive details with the PGP key at /security/pgp.asc if you prefer.

SeverityExamplesBounty
CriticalAccount takeover without user interaction, mass data exfiltration, RCE$5,000
HighAuthenticated cross-tenant data access, privilege escalation, stored XSS in dashboard$1,000
MediumReflected XSS, CSRF on non-trivial action, SSRF, broken access control on a non-critical endpoint$250
LowInformation disclosure with no PII, missing security header, weak rate-limit$50

Scope: socialscalr.com, *.socialscalr.com, the Chrome extension (any version on the Web Store), and the public REST API. Out of scope: third-party services (LinkedIn, Square, Supabase - report those upstream), self-XSS, DoS via volumetric attack, social engineering of staff.

Rules: first reporter for each unique issue wins. Don't access, modify, or exfiltrate data you don't own. Don't run scanners that generate >100 req/sec. Don't publicly disclose before we've fixed and you've gotten an OK.

Incident response

If we detect or are notified of a security incident affecting customer data:

  1. Containment within 1 hour (revoke tokens, rotate keys, isolate the affected component).
  2. Initial impact assessment within 24 hours.
  3. Affected customers notified by email within 72 hours, with what we know and the steps we're taking.
  4. Public post-mortem within 14 days, posted to status page + this page.

To date, we have had zero known security incidents affecting customer data.

Compliance roadmap

Honest about where we are. SOC 2 Type II is on the roadmap for Q4 2026 once the team is large enough to support the audit cadence. We're not pursuing ISO 27001 or HIPAA - LinkedIn outreach data is not PHI and our customers are not regulated entities for this workflow. If you're an enterprise buyer with specific certification requirements, talk to us early: [email protected].