Privacy Tools Guide

Identify subscription services by checking credit card statements and bank records for recurring charges. Contact each company with a death certificate and request account closure or transfer to a surviving family member. Request refunds for prepaid services. For locked accounts, credit card companies can sometimes help—request the card be canceled so fraudulent charges stop. Document all subscriptions in your will to make executor’s job easier, and maintain a shared password manager with emergency access instructions for your family.

Understanding the Challenge

Executors face several obstacles when managing subscription services:

  1. Multi-factor authentication blocks access to account dashboards
  2. Payment methods may be automatically updated or tokenized
  3. Family sharing plans complicate individual cancellations
  4. Password managers may be locked without recovery access

The average person has 12-15 active subscriptions, ranging from streaming services to software tools. Without proper documentation, tracking these becomes time-consuming.

Step 1: Gathering Access Credentials

Before attempting cancellations, you’ll need to gather login credentials. Several approaches exist depending on the deceased’s digital organization.

Password Manager Recovery

If the deceased used a password manager, recovery options vary:

# Example: Using Bitwarden CLI to list items after gaining access
bw list items --url netflix.com
bw list items --url spotify.com
bw list items --url amazon.com

Browser Credential Access

For Chrome or Firefox users, credentials may be synced to Google Account or Firefox Account. Legal representatives can request account access through Google’s Inactive Account Manager or similar services.

Step 2: Discovering Active Subscriptions

Finding all subscriptions requires multiple approaches:

Bank Statement Analysis

The most reliable method involves reviewing bank and credit card statements:

# Example: Parsing bank CSV exports to find recurring charges
import csv
from collections import defaultdict
from datetime import datetime

def find_subscriptions(bank_csv_path):
    charges = defaultdict(list)

    with open(bank_csv_path, 'r') as f:
        reader = csv.DictReader(f)
        for row in reader:
            description = row['Description'].lower()
            amount = float(row['Amount'])

            # Common subscription keywords
            keywords = ['spotify', 'netflix', 'amazon prime', 'adobe',
                       'microsoft', 'apple', 'google', 'hulu', 'disney']

            for keyword in keywords:
                if keyword in description:
                    charges[keyword].append({
                        'date': row['Date'],
                        'amount': amount,
                        'description': row['Description']
                    })

    return charges

# Usage
subscriptions = find_subscriptions('bank_statement.csv')
for service, transactions in subscriptions.items():
    print(f"{service}: {len(transactions)} charges found")

Email Search Techniques

Search the deceased’s email for subscription-related messages:

# Gmail search operators for finding subscriptions
subject:(subscription OR "receipt" OR "invoice" OR "payment confirmed")
subject:("cancel" OR "renewal" OR "billing")
from:(billing@ OR payments@ OR support@)

Focus on domains like:

Step 3: Account Cancellation Methods

Different services have varying cancellation procedures:

Streaming Services

Service Cancellation URL Notes
Netflix netflix.com/cancelplan Requires login
Spotify spotify.com/account Requires login
Disney+ disneyplus.com/account Requires login
Hulu hulu.com/account Requires login

Developer and SaaS Tools

Many developers use services requiring specific cancellation steps:

# GitHub subscription cancellation via CLI (if access available)
gh billing-plan --cancel

# Heroku account deletion
# Requires login at dashboard.heroku.com/account

# DigitalOcean account closure
# Requires login at cloud.digitalocean.com/settings

Automated Cancellation Attempts

For bulk cancellation attempts, you can script common service portals:

import requests
from bs4 import BeautifulSoup

class SubscriptionCanceler:
    def __init__(self, session):
        self.session = session

    def attempt_cancel_netflix(self, email, password):
        """Attempt Netflix cancellation via web automation"""
        # Note: Most services require manual cancellation
        # This is for educational purposes only
        pass

    def check_active_subscriptions(self, email):
        """Check which subscriptions are associated with an email"""
        # Many services don't expose this programmatically
        # This would require checking each service individually
        pass

Important: Most major services require account login for cancellation. Automated cancellation scripts often violate Terms of Service and may be blocked by CAPTCHAs or rate limiting.

Step 4: Payment Method Cancellation

When direct account access isn’t possible, blocking payments prevents continued billing:

Credit Card Cancellation

Contact the card issuer to:

  1. Cancel the physical card
  2. Request a new card with new numbers
  3. Set up account alerts for recurring charges
# Example: Bank API call for card management (pseudo-code)
POST /api/v1/accounts/{account_id}/cards
{
  "action": "cancel",
  "reason": "account_holder_deceased",
  "replace": true
}

PayPal and Payment Apps

Step 5: Documentation and Estate Protection

Maintain records for all cancellation attempts:

import json
from datetime import datetime
import os

class CancellationLogger:
    def __init__(self, estate_id):
        self.estate_id = estate_id
        self.log_file = f"cancellation_log_{estate_id}.json"
        self.logs = []

    def log_attempt(self, service, method, result, notes=""):
        entry = {
            "timestamp": datetime.now().isoformat(),
            "service": service,
            "method": method,
            "result": result,
            "notes": notes
        }
        self.logs.append(entry)
        self._save()

    def _save(self):
        with open(self.log_file, 'w') as f:
            json.dump(self.logs, f, indent=2)

    def generate_report(self):
        return json.dumps({
            "total_attempts": len(self.logs),
            "successful": len([l for l in self.logs if l['result'] == 'success']),
            "pending": len([l for l in self.logs if l['result'] == 'pending']),
            "failed": len([l for l in self.logs if l['result'] == 'failed'])
        }, indent=2)

# Usage
logger = CancellationLogger("estate_2024_001")
logger.log_attempt("Netflix", "web_portal", "success", "Canceled via web dashboard")
logger.log_attempt("Spotify", "email_request", "pending", "Awaiting response")
print(logger.generate_report())

Several legal frameworks affect subscription cancellation:

Proactive Measures: Digital Estate Planning

Encourage loved ones to maintain a subscription inventory:

# Example: subscriptions.yaml for digital estate planning
subscriptions:
  - name: "Netflix"
    email: "user@example.com"
    login: "stored in Bitwarden vault"
    billing_day: 15
    cost: 15.99

  - name: "GitHub Pro"
    email: "user@example.com"
    billing_day: 1
    cost: 4.00

  - name: "Adobe Creative Cloud"
    email: "user@example.com"
    billing_day: 22
    cost: 54.99

emergency_access:
  password_manager: "Bitwarden"
  emergency_contact: "John Doe"
  vault_access_method: "Emergency access feature"

Built by theluckystrike — More at zovo.one