Where Chrome Bookmarks Stored May 2026

This is Chrome’s automatic safety net. Every few launches (or after significant changes), Chrome copies the live Bookmarks file to Bookmarks.bak . If the main file gets corrupted (power outage during a write), Chrome will silently restore from the .bak file.

import json import re with open('Bookmarks', 'r', encoding='utf-8') as f: data = json.load(f) def clean_node(node): if 'children' in node: node['children'] = [clean_node(c) for c in node['children'] if not (c.get('type') == 'url' and 'pinterest.com' in c.get('url', ''))] return node

You cannot just concatenate two JSON files. You must open both, copy the children array from one bookmark_bar into the other, ensuring you don't duplicate folder IDs (though Chrome regenerates IDs on startup).

data['roots']['bookmark_bar'] = clean_node(data['roots']['bookmark_bar'])

This is Chrome’s automatic safety net. Every few launches (or after significant changes), Chrome copies the live Bookmarks file to Bookmarks.bak . If the main file gets corrupted (power outage during a write), Chrome will silently restore from the .bak file.

import json import re with open('Bookmarks', 'r', encoding='utf-8') as f: data = json.load(f) def clean_node(node): if 'children' in node: node['children'] = [clean_node(c) for c in node['children'] if not (c.get('type') == 'url' and 'pinterest.com' in c.get('url', ''))] return node

You cannot just concatenate two JSON files. You must open both, copy the children array from one bookmark_bar into the other, ensuring you don't duplicate folder IDs (though Chrome regenerates IDs on startup).

data['roots']['bookmark_bar'] = clean_node(data['roots']['bookmark_bar'])