Last updated: 2026-05-12
paycancel ("the Extension") is operated by UNKRYPT (a sole proprietorship organized in Japan), with Ryohei Mizuno (水野亮平) as its representative (the "Operator"). It is designed with user privacy as the highest priority. This policy explains what information the Extension handles and how. It is written to comply with the EU General Data Protection Regulation (GDPR), the UK Data Protection Act 2018, the California Consumer Privacy Act (as amended by the CPRA), and the Japanese Act on the Protection of Personal Information (APPI).
chrome.storage.local).The following data is stored within the browser. It is not transmitted to the operator or any third party unless you opt in to specific features (Sections 3–6).
| Data | Examples | Storage |
|---|---|---|
| Subscription information | service name, amount, currency, cycle, renewal date, payment URL, cancellation URL | IndexedDB |
| Cancellation history | timestamp, duration, dark patterns encountered, Procedure version | IndexedDB |
| Cancellation evidence | screenshot (PNG), SHA-256 hash, Ed25519 timestamp signature | IndexedDB |
| User settings | notification preferences, telemetry consent, reminder days, locale, tier | IndexedDB |
| Cryptographic keys | Ed25519 keypair for evidence integrity (private key never leaves the device) | chrome.storage.local |
| Procedure cache | JSON fetched from CDN (public data) | IndexedDB |
| Pro license token | signed JWT issued by the operator (when applicable) | chrome.storage.local |
| PES sync state | anonymous user identifier, sync version (no credentials) | chrome.storage.local |
| PES master secret cache | 32-byte AES-256-GCM-encrypted master secret + non-extractable wrapping key | chrome.storage.local (encrypted) + IndexedDB (wrapping key) |
| Visit history | per-domain visit counts (90-day rolling window, used for unused-subscription detection) | IndexedDB |
| Destination | Purpose | Information sent |
|---|---|---|
cdn.paycancel.net/procedures/* | Fetch public Procedure JSON | Service ID only (e.g., "netflix-jp"). No user identifier. |
| Stripe Checkout / Customer Portal (in a separate browser tab) | Subscription billing (Pro plan only) | Whatever you enter directly into Stripe's pages. The Extension does not see it. |
| Sentry (only if configured by the operator) | Error monitoring | See Section 6 |
Personal information, subscription lists, visited URLs, cancellation history, and statistical summaries thereof are never transmitted by default.
If you choose to enable PES, the Extension synchronizes your subscription list, cancellation history, settings, and cancellation evidence across your devices through paycancel's cloud infrastructure. Every byte sent to the cloud is encrypted on your device before transmission.
chrome.storage.local, and the encryption key is a non-extractable Web Crypto key stored in IndexedDB (JavaScript cannot read its raw bytes even via DevTools). The cache lives only on your device, is removed when you disconnect PES or clear all data, and is never transmitted.| Storage | Content | Encrypted? |
|---|---|---|
Supabase user_blobs | Main sync payload (subscriptions, history, settings, license token) | ✅ AES-256-GCM |
Supabase recovery_codes | SHA-256 hash of a recovery code you generated. Not the recovery code itself. | Hashed |
Supabase evidence_blob_refs | Encrypted evidence metadata (blob ID, size, SHA-256 of plaintext, R2 key) | Plaintext metadata only — does not reveal evidence content |
Cloudflare R2 paycancel-evidence | Encrypted evidence PNG blobs | ✅ AES-256-GCM |
| Supabase Auth (anonymous user) | Anonymous Supabase user ID derived from passkey credential ID hash | n/a — no email, no name, no phone |
The operator does not receive or store: your email, name, phone number, IP address (beyond ephemeral routing necessity), browsing history, or the plaintext contents of any synchronized field.
When you set up PES the Extension displays a 52-character recovery code generated entirely on your device. The operator does not retain this code, nor any value from which it can be reconstructed. If you lose access to your passkey AND lose your recovery code, the operator cannot decrypt your synced data. Store the recovery code in a password manager or printed in a safe place.
You may disconnect PES at any time from the Extension's settings. To request server-side deletion of your ciphertext, use the "Disconnect & delete cloud data" UI option or email paycancel.net/#contact with the anonymous user ID shown in the sync panel.
The Extension's cancellation Procedures are continuously improved through anonymous contributions from users who opt in to Pioneer Mode. This section explains exactly what is shared with the operator when you opt in, and what the operator does with it.
When you successfully complete a cancellation on a supported service while Pioneer Mode is enabled, the Extension constructs an observation trace consisting of:
netflix.com). URL paths and query parameters are stripped.click / keypress), order, and timing (with Laplace noise, ε = 1.0, applied).Before transmission, the trace passes through a regex-based PII filter that drops the entire trace if it detects email addresses, phone numbers, payment-card-like numbers, or UUIDs anywhere in the structural metadata. A second filter at the server boundary provides defense in depth.
A community trace is held in a quarantine table on the server. It is only published (as a Procedure candidate) when at least k=3 distinct anonymous contributors have submitted matching flow signatures within a 14-day window and the candidate has not received ≥2 negative quality votes. This makes it structurally impossible for a single user's submission to be visible in the resulting Procedure.
A separately enabled "Operator Mode" is used by paycancel's operator on their own test browser to publish operator-verified Procedures with k=1. This mode is gated by an HMAC secret known only to the operator and is not available to end users.
When you opt in to Pioneer Mode and your structural traces survive PII filtering and k-anonymity gating, you grant the operator a worldwide, royalty-free, irrevocable, sub-licensable license to use the structural signatures and the resulting derived Procedures for the purpose of operating, improving, and distributing the Extension and its cancellation guidance. This license covers only the anonymized derivatives — not any underlying personal data — because no personal data leaves your device.
You can disable Pioneer Mode at any time. Already-submitted traces cannot be individually withdrawn because they are anonymized and bucketed; however, you can request that all traces matching your anonymous contributor ID be purged before publication by writing to paycancel.net/#contact with the contributor ID shown in the Pioneer panel.
When Settings > Privacy > Contribute anonymous telemetry is enabled, the Extension reports Procedure execution failures with: Procedure ID and version, failed step ID, SHA-256 hash of the surrounding DOM (not the DOM itself), page path with query parameters removed, browser type, and occurrence timestamp. The server enforces k-anonymity (k = 50) before any failure statistic becomes visible to the operator's dashboards. IP addresses are stripped at the server boundary.
If error monitoring is enabled in your build, unhandled JavaScript exceptions are sent to Sentry with: error message and stack trace (with chrome-extension://<id>/ origin stripped), Extension version, browser hint, and a randomly-generated event ID. The error reporter explicitly does not include user identifiers, subscription data, page contents, cookies, IP addresses, or URL query parameters.
| Sub-processor | Role | Data they see |
|---|---|---|
| Cloudflare, Inc. | CDN, R2 object storage, Pages | Public Procedure JSON; opaque ciphertext blobs |
| Stripe Payments Europe Ltd. and affiliates | Pro subscription billing | Whatever you enter into Stripe directly |
| Supabase Inc. | Database, anonymous auth, Edge Functions | Opaque ciphertext for PES; anonymous traces for Community Authoring |
| Functional Software, Inc. (Sentry) | Error monitoring (only when enabled) | Stack traces and error messages, with origin and IP stripped |
| Google LLC (Gemini API) | Procedure structural extraction (operator-side pipeline only) | Public Procedure HTML; never user data |
Your encrypted ciphertext and (if you opt in) your anonymous traces may be processed on servers located outside your country of residence. We rely on Standard Contractual Clauses (SCC) and equivalent safeguards in our agreements with sub-processors. Because all user content is end-to-end encrypted before transmission, no party in the data chain (including the operator) can read the plaintext.
| Data | Retention |
|---|---|
| Local data (your device) | Until you delete it or uninstall the Extension |
| PES ciphertext | Until you disconnect or request deletion |
| Encrypted evidence on R2 | Until you delete the corresponding record or disconnect |
| Anonymous community traces awaiting k-anonymity threshold | 14 days from submission; expired traces auto-purged |
| Aggregated failure statistics | Indefinitely (no PII) |
| Sentry error events | 90 days, then auto-purged by Sentry |
The Extension is not intended for children under 13 (16 in the EU). We do not knowingly collect personal information from such users.
We use industry-standard encryption (AES-256-GCM, HKDF-SHA-256, Ed25519, WebAuthn) and host on infrastructure that holds SOC 2 certification (Cloudflare, Supabase). No system is perfectly secure, and the security of data on your own device depends on your operating system and account hygiene. If a security incident affects your data, we will notify you within 72 hours of becoming aware, in accordance with GDPR Article 33.
We will notify you of material changes via the Extension UI before they take effect. For changes that would reduce your existing rights, we will request explicit re-consent. The "Last updated" date is authoritative.
For users residing in Japan, this policy is governed by Japanese law. For other users, the mandatory data-protection laws of your country of residence apply; in their absence, the law of England and Wales applies.
最終更新: 2026-05-12
paycancel(以下「本拡張機能」)は、UNKRYPT(日本の個人事業主、代表: 水野亮平。以下「運営者」)が運営しています。本拡張機能はユーザーのプライバシーを最優先に設計されています。本ポリシーは、本拡張機能がどのような情報を、どのように扱うかを説明します。EU 一般データ保護規則(GDPR)、英国データ保護法、カリフォルニア消費者プライバシー法(CPRA で改正後)、および日本の個人情報の保護に関する法律(個情法)に準拠して作成されています。
chrome.storage.local)にのみ保存します。以下の情報はブラウザ内に保存されます。第 3 条〜第 6 条の機能をユーザーが有効化しない限り、第三者には送信されません。
| 種類 | 具体例 | 保存先 |
|---|---|---|
| サブスクリプション情報 | サービス名・金額・通貨・サイクル・更新日・決済 URL・解約導線 URL | IndexedDB |
| 解約履歴 | 解約日時・所要時間・検出されたダークパターン・Procedure バージョン | IndexedDB |
| 解約証拠 | スクリーンショット PNG・SHA-256 ハッシュ・Ed25519 タイムスタンプ署名 | IndexedDB |
| ユーザー設定 | 通知設定・テレメトリ同意・リマインダ日数・言語・現ティア | IndexedDB |
| 暗号鍵 | 解約証拠改ざん検知用 Ed25519 鍵ペア(秘密鍵は端末外に出ません) | chrome.storage.local |
| Procedure キャッシュ | CDN から取得した公開データ | IndexedDB |
| Pro ライセンストークン | 運営者発行の署名付き JWT | chrome.storage.local |
| PES 同期状態 | 匿名 user ID とバージョン番号のみ | chrome.storage.local |
| PES マスター鍵キャッシュ | 32 バイトのマスター秘密鍵 (AES-256-GCM 暗号化済) + 非抽出 wrapping 鍵 | chrome.storage.local (暗号文) + IndexedDB (wrapping 鍵) |
| 訪問履歴 | ドメインごとの訪問回数(90 日ローリング・未使用検出に使用) | IndexedDB |
| 宛先 | 目的 | 送信される情報 |
|---|---|---|
cdn.paycancel.net/procedures/* | 公開 Procedure JSON の取得 | サービス ID のみ。ユーザー識別子なし |
| Stripe Checkout / Customer Portal(別タブ・Pro 購入時のみ) | サブスク課金 | ユーザーが Stripe に直接入力する情報 |
| Sentry(運営者が設定した場合のみ) | エラー監視 | 第 6 条参照 |
個人情報、サブスクリプションリスト、訪問 URL、解約履歴、これらの統計サマリは一切送信されません。
PES を有効化すると、サブスク一覧・解約履歴・設定・解約証拠が paycancel のクラウドインフラを介して端末間で同期されます。クラウドに送信される全バイトは、送信前に端末上で暗号化されます。
chrome.storage.local に書き込まれ、その暗号化鍵は Web Crypto 非抽出鍵 として IndexedDB に保存 (JavaScript からは DevTools 経由でも生バイトを読めません)。キャッシュは端末内のみ・PES 切断時に消去・外部送信なし。| 保管先 | 内容 | 暗号化 |
|---|---|---|
Supabase user_blobs | メイン同期ペイロード | ✅ AES-256-GCM |
Supabase recovery_codes | 復旧コードの SHA-256 ハッシュ(コード本体ではない) | ハッシュ |
Supabase evidence_blob_refs | 暗号化済 evidence のメタ(blob_id・サイズ・SHA-256・R2 キー) | メタのみ平文 |
Cloudflare R2 paycancel-evidence | 暗号化済 evidence PNG | ✅ AES-256-GCM |
| Supabase Auth(匿名) | パスキー credential ID ハッシュ由来の匿名 UUID | 該当なし — メール・氏名・電話番号なし |
運営者は以下を受領も保管もしません: メール・氏名・電話番号・IP アドレス(経路上一時的なものを除く)・閲覧履歴・同期項目の平文。
PES セットアップ時、本拡張機能は 52 文字の復旧コードを端末上で生成して 1 度だけ表示します。運営者はこのコードも、これを再構築できる値も一切保持しません。 パスキーと復旧コードの両方を失った場合、運営者は同期データを復号できません。復旧コードはパスワードマネージャや印刷物として安全に保管してください。
設定画面の「同期解除」でいつでもローカル同期状態をクリアできます。サーバ側 ciphertext の削除は「同期解除&クラウドデータ削除」または paycancel.net/#contact までご連絡ください。
本拡張機能の解約 Procedure は、Pioneer Mode に同意したユーザーからの匿名貢献により継続的に改善されます。本セクションは、Pioneer Mode を有効化した場合に運営者と共有される内容を正確に説明します。
送信前に正規表現ベースの PII フィルタを通し、メール・電話番号・カード番号類似値・UUID を検出したら trace 全体を破棄します。サーバ境界でも同様のフィルタを適用します。
community trace は検疫テーブルに保管され、異なる匿名貢献者から k=3 件以上の一致するフロー署名が 14 日以内に集まり、ネガティブ品質票が 2 件未満である場合のみ Procedure 候補として公開されます。
運営者のみが利用する HMAC 保護付きモード。エンドユーザーには提供されません。
Pioneer Mode 有効時、PII フィルタと k-匿名性ゲートを通過した構造 trace に対し、本拡張機能の運営・改善・配布のために、運営者へ全世界・無償・取消不能・再許諾可能な利用権を付与します。匿名化された派生物のみが対象で、平文の個人データは端末外に出ないため対象外です。
Pioneer Mode はいつでも無効化できます。匿名化・バケット化された既送信 trace の個別撤回はできませんが、公開前であれば Pioneer パネルの貢献者 ID を paycancel.net/#contact までご連絡いただくことで該当 ID に紐づく全 trace を破棄できます。
設定 > プライバシー > 「匿名テレメトリの貢献」が有効の場合のみ、Procedure ID と version、失敗ステップ ID、周辺 DOM の SHA-256 ハッシュ、ページパス(クエリ削除)、ブラウザ種別、発生時刻が送信されます。サーバ側で k=50 集計後でなければ統計に反映されません。IP アドレスはサーバ境界で除去されます。
運営者がエラー監視を有効化したビルドでは、未捕捉の例外(オリジン・IP 除去済みのスタックトレース、拡張機能バージョン、ブラウザ種別、ランダム生成のイベント ID)が Sentry に送信されます。ユーザー識別子、サブスク情報、ページ内容、Cookie、IP、URL クエリは含めません。
| 副処理者 | 役割 | 見える情報 |
|---|---|---|
| Cloudflare, Inc. | CDN / R2 / Pages | 公開 Procedure JSON、ciphertext |
| Stripe Payments Europe Ltd. および関連会社 | Pro 課金 | ユーザーが Stripe に入力する情報 |
| Supabase Inc. | DB・匿名認証・Edge Functions | PES の ciphertext、匿名 trace |
| Functional Software, Inc.(Sentry) | エラー監視(有効化時のみ) | スタックトレース・エラーメッセージ(オリジン/IP 除去済み) |
| Google LLC(Gemini API) | 運営側 Procedure 構造抽出 | 公開 Procedure HTML のみ |
ciphertext およびオプトイン時の匿名 trace は居住国外のサーバ(主に米国・EU)で処理される可能性があります。標準契約条項(SCC)等で保護を担保しています。すべてのユーザーコンテンツは送信前に End-to-End 暗号化されているため、データチェーン上のいかなる当事者(運営者を含む)も平文を読めません。
| データ | 保持期間 |
|---|---|
| ローカルデータ | 削除またはアンインストールまで |
| PES ciphertext | 同期解除または削除請求まで |
| R2 上の暗号化 evidence | レコード削除または同期解除まで |
| k-匿名性閾値待ち community trace | 14 日(経過後自動削除) |
| 集計済み失敗統計 | 無期限(PII なし) |
| Sentry エラーイベント | 90 日(自動削除) |
本拡張機能は 13 歳未満(EU では 16 歳未満)の方を対象としていません。意図的に個人情報を収集しません。
業界標準の暗号化と SOC 2 認証保持インフラを利用しています。データに影響するセキュリティインシデント認知時は GDPR 第 33 条に従い 72 時間以内に通知します。
重要な変更は施行前に本拡張機能 UI でお知らせします。既存の権利を縮小する変更については明示的な再同意をお願いします。最終更新日が有効版です。
日本居住者には日本法を適用します。その他のユーザーには、居住国の強行的データ保護法令を適用し、当該法令がない場合は英国法を適用します。