# Obsidian Web Clipper
The Obsidian Web Clipper is a free and [open-source](https://github.com/obsidianmd/obsidian-clipper) Web browser extension created by [[Steph Ango]], the CEO of Obsidian, and maintained by the [[Obsidian]] team. It makes it a breeze to curate/capture content and highlights from anywhere on the Web, convert it to [[Markdown]], and to send it all to your Obsidian vault(s). It requires Obsidian 1.7.2 or above. Data is saved locally, no data is collected, and no usage metrics are tracked.
## What's new
Recent updates have turned the clipper into a full-featured reading-and-capture environment:
- **Highlights management**. Highlights are now first-class objects you can review, edit, organize, and selectively capture from inside the extension — not just markers waiting to be clipped. Highlight modes control how highlights interact with `{{content}}`: inline in content, as a standalone list, or ignored entirely.
- **Persistent Reader mode**. When reading a page in Reader mode and clicking a link, the next page also opens in Reader mode. Browsing becomes a continuous, distraction-free reading session across the entire navigation chain.
- **Reader customization**. Colors, fonts, line-height, and other reading-comfort settings are fully configurable, transforming the extension into a custom-styled read-it-now UI for the open web.
- **Frictionless copy-to-Markdown**. From any captured or rendered content, copying as Markdown is a single action — useful when you want Markdown without clipping to your vault.
- **Web page interpretation via AI**. The [[Interpreter]] uses LLMs to extract, summarize, transform, or analyze page content via [[Natural Language]] prompts in templates — powerful for enriching captures with summaries, key points, translations, or structured data extraction.
- **Advanced template logic** (1.0.0+). Conditionals, loops, variable assignment, and fallbacks enable dynamic template behavior without manual intervention.
Net effect: the clipper is now a complete pipeline from web browsing → selective highlighting → AI-enriched capture → vault integration.
![[Supercharge Your PKM Workflow with the Obsidian Web Clipper (Article) - Obsidian Web Clipper UI.png]]
Caption: Content captured by the Obsidian Web Clipper is automatically converted to Markdown, and additional metadata is also captured
![[Obsidian Web Clipper - Example of highlighting.png]]
Caption: Highlighting experience with the Obsidian Web Clipper
The Obsidian Web Clipper not only captures and converts content to Markdown, but also extract useful metadata (e.g., page title, tags, og meta, and more!).
![[Obsidian Web Clipper - Example once captured.png]]
Caption: Once captured, content is saved to your vault(s) along with the captured metadata
One of the most powerful features is the **Interpreter**, which uses AI to extract, analyze, and transform page content using plain [[Natural Language]] prompts. Rather than manually selecting or filtering content, you can ask the AI to do it for you:
- `{{"2-sentence summary"}}` — extract a concise summary
- `{{"Key takeaways as a bulleted list"}}` — structure the content automatically
- `{{"Extract all product names and prices"}}` — pull structured data
- `{{"Translate into Spanish"}}` — transform the content
- `{{"Identify 3 main arguments and counter-arguments"}}` — analytical extraction
The Interpreter runs **prompt variables** either automatically during capture or on-demand via manual trigger. Context can be optimized per template using selector variables and filters to reduce API costs. It integrates with multiple LLM providers (Anthropic, OpenAI, Google, Meta, etc.) and supports local models via [[Ollama]]. **Note**: this consumes API credits with your provider; use small, fast models (Claude Haiku, Gemini Flash, Llama 3B/8B) for cost-effective results.
Many browsers are supported:
- Chrome (and Chromium-based browsers like Brave, Arc, Orion, Vivaldi)
- Safari (macOS, iOS, iPadOS)
- Firefox (including Firefox Mobile)
- Edge
## Key Concepts of the Obsidian Web Clipper
- **Extension**: the Obsidian Web Clipper is an extension that runs inside of your Web browser and enables you to capture information
- **Templates**: create and use templates to customize the information and metadata to capture depending on the Website or type of content
- **Highlighter**: enables highlighting different parts of the page, and seeing all the already highlighted elements
- **Variables**: enables capturing different elements (e.g., the page title, the description, the content, etc). There are five types: preset, prompt, meta, selector, and Schema.org variables
- **Prompt variables**: variables that use natural language prompts and AI to transform information
- **Interpreter**: uses AI to process/transform information using Large Language Models based on the prompt defined in a prompt variable
- **Filters**: functions that you can add to variables and prompt variables to further transform the information (e.g., transform text, dates, and a lot more)
- **Logic**: template logic for conditionals, loops, variable assignment, and fallbacks (inspired by Twig and Liquid syntax). Requires Web Clipper 1.0.0+
## Advanced Capabilities
### AI-Powered Content Interpretation
The Interpreter transforms the clipper from a simple capture tool into an **intelligent extraction engine**. Instead of manually parsing pages:
- **Summarization**: automatically extract executive summaries in any style (bullet points, paragraphs, key takeaways)
- **Data extraction**: pull structured information (pricing, ratings, metadata) from unstructured content
- **Content transformation**: translate, rephrase, change tone, or adapt content for different audiences
- **Analytical processing**: identify main arguments, counterarguments, key themes, or sentiment without manual reading
- **Custom analysis**: write any natural language prompt to extract exactly what you need
Prompt variables are written as plain English: `{{"your instruction here"}}`. The Interpreter sends page context + your prompt to an LLM, which returns structured or unstructured results for automatic insertion into your note.
**Cost optimization**: Use **context filters** to reduce token usage. Example: instead of sending full `{{fullHtml}}`, send `{{selectorHtml:article|markdown|slice:0,2000}}` to limit context to the article section and first 2000 characters.
### Template Logic (Web Clipper 1.0.0+)
Conditionals, loops, and variable assignment enable **dynamic templates** that adapt to page content:
```twig
{% if schema:author %}
Captured from: {{schema:author}}
{% else %}
Author unknown
{% endif %}
{% for item in schema:@Product:offers %}
- Price: {{item.price}} ({{item.priceCurrency}})
{% endfor %}
```
This unlocks workflows like:
- Automatically branch capture behavior based on page type (article → add summary; product → extract pricing)
- Build dynamic URLs or file names from multiple fields
- Set fallback values when data is missing
- Iterate over structured data (reviews, prices, authors) without manual extraction
See the [Logic documentation](https://help.obsidian.md/web-clipper/logic) for full syntax and examples.
## How to Install the Obsidian Web Clipper
To install the Obsidian Web Clipper, just go to the official website: https://obsidian.md/clipper and install the extension.
## How to use the Obsidian Web Clipper
To capture information on a page, you can either click on the icon of the extension, use hotkeys, or highlight content and right click to invoke the Obsidian Web Clipper:
![[Obsidian Web Clipper - right click.png]]
Caption: Invoking the Obsidian Web Clipper using the context menu
Default hotkeys:
| Action | macOS | Windows/Linux |
|---|---|---|
| Open clipper | `Cmd+Shift+O` | `Ctrl+Shift+O` |
| Quick clip | `Opt+Shift+O` | `Alt+Shift+O` |
| Toggle highlighter | `Opt+Shift+H` | `Alt+Shift+H` |
In the context menu, you can choose to
- Capture the whole page
- Add the selected text to the list of highlights you want to capture
- Open the side panel
### Capture behavior
By default, the Web Clipper extracts only the main article content from a page using [Defuddle](https://github.com/kepano/defuddle). If you define a custom template, it overrides this default behavior.
If text is selected on the page, the clipper uses the selection instead of the full content. You can select the entire page with `Ctrl/Cmd+A`. If highlights are present, the clipper uses the highlights.
Note that images are NOT automatically downloaded. They remain linked to their web URLs. To download them locally, use the Obsidian command "Download attachments for current file" after clipping.
![[Obsidian Web Clipper - side panel.png]]
Caption: The side panel always remains visible and accessible
You can also enable/disable the highlighter by clicking on the extension icon, and clicking on the highlighter button:
![[Obsidian Web Clipper - highlighter button.png]]
Caption: You can enable or disable the highlighter
Once the highlighter is enabled, you can highlight elements on the page:
![[Obsidian Web Clipper - highlighting elements.png]]
Caption: Using the highlighter
The highlighter has three settings that control how highlights interact with `{{content}}`:
- **Highlight the page content**: adds `==highlight==` syntax inline within the full content
- **Replace the page content**: returns only the list of highlights
- **Do nothing**: returns the original content without any highlight markers
You can also use the highlights variable directly: `{{highlights|map: item => item.text|join:"\n\n"}}`
Next to that button, you can also select the template to use for capturing content:
![[Obsidian Web Clipper - template selection.png]]
Caption: Select the template to use
If you click on the three dots, you can see the list of metadata that the Obsidian Web Clipper has detected on the current page:
![[Obsidian Web Clipper - page variables list.png]]
Caption: The list of page variables and values for the current page
At the bottom of the extension pane, shown when clicking on the extension icon, you can:
- Change the folder in which the information will be saved to in your Obsidian vault
- Capture the content and send it to your vault
- Capture the content and send it to the clipboard
- Capture the content and save it to a file on your computer
![[Obsidian Web Clipper - save options.png]]
Caption: Configuring where to save the captured content
Last but not least, to use the Interpreter, you'll first need to enable and configure it in the settings. I will cover this in the next section.
## Configuration
In the settings, you can configure various things. Let's explore the main parts.
### Target vault(s)
First, you can define the vault(s) in which you want the extension to save captured content. You can add multiple ones if needed:
![[Obsidian Web Clipper - capture to vault.png]]
Caption: Vaults configuration
### Hotkeys
You can also customize the hotkeys used to open the clipper, quickly clip information, and toggle the highlighter mode:
![[Obsidian Web Clipper - hotkeys.png]]
Caption: Hotkeys configuration
### Templates
You can create custom templates, defining what to capture, how to name the created notes, which note templates to use, etc:
![[Obsidian Web Clipper - capture templates.png]]
Caption: Custom template definition
When creating or editing templates, under "Behavior", you can choose what the extension should do:
- Create a new note
- Add the content to an existing note, either at the bottom or at the top
- Add to a daily note, either at the bottom or at the top (requires the daily notes plugin)
When creating new notes, the name and location can also be configured.
#### Template triggers
Template triggers let the extension automatically select the right template depending on the page you're clipping. There are three types of triggers:
1. **Simple URL matching**: triggers if the page URL starts with the given pattern (e.g., `https://obsidian.md`)
2. **Regular expression matching**: enclose the pattern in forward slashes for regex (e.g., `/^https:\/\/www\.imdb\.com\/title\/tt\d+\/reference\/?$/`)
3. **Schema.org matching**: use the `schema:` prefix to match based on structured data (e.g., `schema:@Recipe`, `schema:@Recipe.name`, `schema:@Recipe.name=Cookie`)
The first match in the template list determines which template is used. Templates can be reordered by dragging.
#### Interpreter context
When the Interpreter is enabled, you can define the context per template, which controls what page data the Interpreter has access to. By default, it uses the entire page HTML. You can narrow this using selector variables (e.g., `{{selectorHtml:#main}}`) and HTML processing filters to reduce context length and improve performance.
Note metadata can also be captured thanks to the "Properties" section. In there, you configure mappings between note metadata property names and variables exposed by the extension.
Those variables correspond to different pieces of information that the extension can automatically extract for you (when available). Those variables can be used not only within the properties section, but also to define note names, etc.
![[Obsidian Web Clipper - example with note names.png]]
Caption: An example of how to use variables to define note names
### Preset variables
The following preset variables are supported:
|Variable|Description|
|---|---|
|`{{author}}`|Author of the page|
|`{{content}}`|Article content, [highlights](https://help.obsidian.md/web-clipper/highlight), or selection, in Markdown format|
|`{{contentHtml}}`|Article content, [highlights](https://help.obsidian.md/web-clipper/highlight), or selection, in HTML format|
|`{{date}}`|Current date, can be formatted using the `date` filter|
|`{{description}}`|Description or excerpt|
|`{{domain}}`|Domain|
|`{{favicon}}`|Favicon URL|
|`{{fullHtml}}`|Unprocessed HTML for the full page content|
|`{{highlights}}`|[Highlights](https://help.obsidian.md/web-clipper/highlight) with text and timestamps|
|`{{image}}`|Social share image URL|
|`{{published}}`|Published date, can be formatted using the `date` filter|
|`{{selection}}`|Currently selected text in Markdown format|
|`{{selectionHtml}}`|Currently selected text in HTML format|
|`{{site}}`|Site name or publisher|
|`{{title}}`|Title of the page|
|`{{time}}`|Current date and time|
|`{{url}}`|Current URL|
|`{{words}}`|Word count of the page content|
### Meta variables
Meta variables extract data from HTML `<meta>` elements, including Open Graph data:
- `{{meta:name:description}}` extracts from `<meta name="description">`
- `{{meta:property:og:title}}` extracts from `<meta property="og:title">`
### Selector variables
Selector variables extract content using CSS selectors:
- `{{selector:h1}}` extracts text content from the first `<h1>` element
- `{{selector:.author}}` extracts text from an element with the `author` class
- `{{selector:img.hero?src}}` extracts the `src` attribute from an image
- `{{selectorHtml:body|markdown}}` extracts HTML content and converts it to Markdown via a filter
- Nested selectors and CSS combinators are supported
- Multiple matches return arrays that can be processed with array filters
### Schema.org variables
Schema.org variables extract structured data from JSON-LD:
- `{{schema:@Type:key}}` typed access (e.g., `{{schema:@Recipe:name}}`)
- `{{schema:@Type:parent.child}}` nested property access
- `{{schema:@Type:arrayKey[0].property}}` indexed array access
- `{{schema:@Type:arrayKey[*].property}}` all items in an array
- Shorthand: `{{schema:author}}`, `{{schema:name}}` (without type prefix)
### Filters
It's also possible to use [filters](https://help.obsidian.md/web-clipper/filters) to modify variables and post-process the information. For instance, filters enable converting dates to certain formats, text to uppercase or lowercase, etc.
Filters are used like this: `{{variable | filter1 | filter2 }}`. This is a pretty common syntax for chaining filters. You can think of it like this: the extension will extract information that corresponds to the variable (e.g., the page title). Then it will apply `filter1`. Then it will apply `filter2`, etc.
Here are some of the currently supported filters:
- Dates
- [date](https://help.obsidian.md/web-clipper/filters#%60date%60): converts a date to the specified [format](https://day.js.org/docs/en/display/format)
- [date_modify](https://help.obsidian.md/web-clipper/filters#%60date_modify%60): modifies a date by adding or subtracting a specified amount of time
- [duration](https://help.obsidian.md/web-clipper/filters#%60duration%60): converts ISO 8601 duration strings or seconds into formatted time strings
- Text conversion and capitalization
- [capitalize](https://help.obsidian.md/web-clipper/filters#%60capitalize%60): capitalizes the first character of the value and converts the rest to lowercase
- [lower](https://help.obsidian.md/web-clipper/filters#%60lower%60): converts text to lower case
- [upper](https://help.obsidian.md/web-clipper/filters#%60upper%60): converts text to upper case
- [title](https://help.obsidian.md/web-clipper/filters#%60title%60): converts text to `Title Case`
- [camel](https://help.obsidian.md/web-clipper/filters#%60camel%60): converts text to `camelCase`
- [kebab](https://help.obsidian.md/web-clipper/filters#%60kebab%60): converts text to `kebab-case`
- [pascal](https://help.obsidian.md/web-clipper/filters#%60pascal%60): converts text to `PascalCase`
- [snake](https://help.obsidian.md/web-clipper/filters#%60snake%60): converts text to `snake_case`
- [uncamel](https://help.obsidian.md/web-clipper/filters#%60uncamel%60): splits camelCase/PascalCase into space-separated words
- [replace](https://help.obsidian.md/web-clipper/filters#%60replace%60): replaces occurrences of specified text (supports simple and regex replacement, multiple replacements)
- [trim](https://help.obsidian.md/web-clipper/filters#%60trim%60): remove white space from both ends of the text
- [safe_name](https://help.obsidian.md/web-clipper/filters#%60safe_name%60): converts text to a safe file name (using conservative and OS-specific sanitization rules)
- Text formatting
- [blockquote](https://help.obsidian.md/web-clipper/filters#%60blockquote%60): adds a Markdown quote prefix (`> `) to each line of the text
- [callout](https://help.obsidian.md/web-clipper/filters#%60callout%60): creates a callout with optional type, title, and fold state parameters
- [footnote](https://help.obsidian.md/web-clipper/filters#%60footnote%60): converts an array or object into a list of Markdown footnotes
- [fragment_link](https://help.obsidian.md/web-clipper/filters#%60fragment_link%60): converts text to text fragment links
- [image](https://help.obsidian.md/web-clipper/filters#%60image%60): converts strings, arrays, or objects into Markdown image syntax
- [link](https://help.obsidian.md/web-clipper/filters#%60link%60): converts strings, arrays, or objects into Markdown link syntax (not the same as wikilink)
- [list](https://help.obsidian.md/web-clipper/filters#%60list%60): converts an array to a Markdown list (bullet, task, numbered, or numbered-task)
- [table](https://help.obsidian.md/web-clipper/filters#%60table%60): converts an array or array of objects into a Markdown table (supports custom headers)
- [wikilink](https://help.obsidian.md/web-clipper/filters#%60wikilink%60): converts text to `[[wikilink]]` syntax with optional aliases
- Numbers
- [calc](https://help.obsidian.md/web-clipper/filters#%60calc%60): performs basic arithmetic operations on numbers
- [length](https://help.obsidian.md/web-clipper/filters#%60length%60): returns the length of strings, arrays, or number of keys in objects
- [round](https://help.obsidian.md/web-clipper/filters#%60round%60): rounds a number to the nearest integer or to a specific number of decimal places
- HTML processing
- [markdown](https://help.obsidian.md/web-clipper/filters#%60markdown%60): converts a string to an Obsidian Flavored Markdown formatted string
- [remove_attr](https://help.obsidian.md/web-clipper/filters#%60remove_attr%60): removes specified HTML attributes
- [remove_html](https://help.obsidian.md/web-clipper/filters#%60remove_html%60): removes specified HTML elements and content (by tag, class, or id)
- [remove_tags](https://help.obsidian.md/web-clipper/filters#%60remove_tags%60): removes specified tags but keeps content
- [replace_tags](https://help.obsidian.md/web-clipper/filters#%60replace_tags%60): replaces HTML tags while maintaining content/attributes
- [strip_attr](https://help.obsidian.md/web-clipper/filters#%60strip_attr%60): removes ALL HTML attributes (optionally keep specific ones)
- [strip_md](https://help.obsidian.md/web-clipper/filters#%60strip_md%60): removes ALL Markdown formatting to plain text
- [strip_tags](https://help.obsidian.md/web-clipper/filters#%60strip_tags%60): removes ALL HTML tags (optionally keep specific ones)
- Arrays and objects
- [first](https://help.obsidian.md/web-clipper/filters#%60first%60): returns the first element
- [last](https://help.obsidian.md/web-clipper/filters#%60last%60): returns the last element
- [join](https://help.obsidian.md/web-clipper/filters#%60join%60): combines an array into a string with a separator
- [map](https://help.obsidian.md/web-clipper/filters#%60map%60): transforms each element (e.g., `map:item => item.property`)
- [merge](https://help.obsidian.md/web-clipper/filters#%60merge%60): adds values to an array
- [nth](https://help.obsidian.md/web-clipper/filters#%60nth%60): keeps nth items using CSS-style syntax (e.g., `3n`, `n+3`)
- [object](https://help.obsidian.md/web-clipper/filters#%60object%60): manipulates objects (array, keys, values conversions)
- [slice](https://help.obsidian.md/web-clipper/filters#%60slice%60): extracts a portion of an array (supports negative indices)
- [split](https://help.obsidian.md/web-clipper/filters#%60split%60): divides a string into an array (supports regex separators)
- [template](https://help.obsidian.md/web-clipper/filters#%60template%60): applies a template string with `${variable}` syntax
- [unique](https://help.obsidian.md/web-clipper/filters#%60unique%60): removes duplicate values from an array
You can find the full list of filters [here](https://help.obsidian.md/web-clipper/filters)
### Logic
Template logic enables conditionals, loops, variable assignment, and fallbacks within templates. The syntax is inspired by Twig and Liquid. This requires Web Clipper 1.0.0+.
**Conditionals**: `{% if variable %}...{% elseif condition %}...{% else %}...{% endif %}`
- Comparison operators: `==`, `!=`, `>`, `<`, `>=`, `<=`, `contains`
- Logical operators: `and` / `&&`, `or` / `||`, `not` / `!`
- Falsy values: `false`, `null`, `undefined`, `""`, `0`, and empty arrays `[]`
**Variable assignment**: `{% set slug = title|lower|replace:" ":"-" %}`
**Fallbacks**: `{{title ?? "Untitled"}}` (chainable: `{{title ?? headline ?? "No title"}}`)
**Loops**: `{% for item in schema:author %}...{% endfor %}`
- Loop variables: `loop.index` (1-indexed), `loop.index0` (0-indexed), `loop.first`, `loop.last`, `loop.length`
- Array access by index: `{{items[0]}}`, `{{items[loop.index0]}}`
- Nested loops are supported
Template logic is evaluated first, then prompt variables are sent to the Interpreter.
See the full [Logic documentation](https://help.obsidian.md/web-clipper/logic) for details and examples.
### Interpreter
In the settings, you can enable/disable the Interpreter feature, and configure it.
You can either let it run automatically, which will automatically run prompt variables, or you can turn it off if you only want to run interpreter manually to save money. If you turn it off, then you'll need to click on the "Interpret" button when capturing information:
![[Obsidian Web Clipper - running interpreter manually.png]]
Caption: Prompt variables are very powerful and versatile
You can also add [[Large Language Models (LLMs)]] and API keys. The following preset providers are supported:
- Anthropic
- Azure OpenAI
- DeepSeek
- Google Gemini
- Hugging Face
- Meta
- Ollama (local models)
- OpenAI
- OpenRouter
- Perplexity
- xAI Grok
You can also add custom providers via settings using a chat completions endpoint.
![[Obsidian Web Clipper - AI models.png]]
Caption: AI Models configuration
Small, fast models are recommended for clipping tasks (e.g., Claude Haiku, Gemini Flash, Llama 3B/8B, OpenAI Mini series), as they provide good results at lower cost.
For local models via Ollama, you need to configure `OLLAMA_ORIGINS` for browser extension access. Note that Ollama's default context window is 2048 tokens, which may need increasing for longer pages. You can also trim context with filters like `{{content|slice:0,1000}}`.
Once your model(s) and API key(s) are configured, you can add expressions known as [prompt variables](https://help.obsidian.md/web-clipper/variables#Prompt+variables) within your templates (cfr previous point) using natural language.
Some examples:
- `{{"Summary of the article}}`
- `{{"5 bullet points summary}}`
- `{{"Chinese version of the article}}`
- ...
## Pro Tips
### Template Strategy
- Create role-specific templates (article, research paper, discussion, newsletter, tutorial, etc.)
- Use template **triggers** to automatically select the right template by URL pattern, regex, or Schema.org markup — reduces friction and ensures consistency
- Leverage **template logic** (`{% if %}...{% endif %}`, loops, variable assignment) to adapt capture behavior dynamically without manual tweaking
- Optimize **Interpreter context** per template: use selector variables (e.g., `{{selectorHtml:#main}}`) to narrow context to article body only, reducing token usage and API costs
### Data Extraction & AI Enrichment
- Use the Interpreter to generate summaries, extract key concepts and definitions, identify supporting/contrarian arguments, or list actionable takeaways
- Start with manual Interpreter triggers to control costs; enable automatic runs only for high-value capture scenarios
- Chain filters with prompt variables for maximum control: e.g., `{{"Extract main points"}} | truncate:500` to limit token usage
- Use **small, fast models** (Claude Haiku, Gemini Flash) for routine extraction; save larger models for complex analysis
### Capture & Organization
- Capture metadata aggressively — pages disappear; you won't get a second chance
- Store captured content in a dedicated location to separate web curation from original thinking
- Use consistent naming conventions and metadata mappings (titles, tags, authors, publish dates)
- Consider daily notes for quick, unprocessed captures; process and link later
- Avoid mixing captured and original content in the same note — keep curation separate from synthesis
### Workflow Integration
- [Regularly review](https://www.dsebastien.net/2022-05-16-periodic-reviews/) captured material — capture without review is busywork
- Connect captured ideas to your knowledge base via wikilinks and tags during review
- Use **highlights** to pre-filter content before capture, reducing noise and improving relevance
- Combine captures with spaced repetition and regular reviews for genuine learning
**Core principle**: Content capture is a pipeline, not a destination. Capture → Review → Connect → Synthesize. Without the downstream steps, capture is just hoarding.
Don't forget to [backup your Obsidian vault](https://www.dsebastien.net/how-i-synchronize-and-backup-my-obsidian-notes/). Content capture is an important part of your [[Personal Knowledge Management System (PKMS)]].
## Troubleshooting
- **Missing content**: Web Clipper uses [Defuddle](https://github.com/kepano/defuddle) to extract article content, which may be too conservative on some pages. Workarounds: select specific text, use the highlighter, or create a custom template with selector variables
- **No content in Obsidian**: check the developer console for errors, verify the vault name matches exactly (not the vault path), and check folder formatting
- **Linux - Obsidian doesn't open**: you may need to register the Obsidian URI protocol. Firefox may require additional browser settings registration
- **Linux - Only filename saved (clipboard issues)**: clipboard permissions are needed. Wayland users must allow clipboard access when the app is not focused:
- Hyprland: `misc { focus_on_activate = true }`
- Sway: `for_window [class="obsidian"] focus_on_window_activation focus`
- KDE: configure Window Management -> Window Rules to allow Obsidian to take focus
- Fallback: enable Legacy mode in Web Clipper Settings -> General (bypasses clipboard, but limits character count)
- **iOS/iPadOS**: enable the extension via Safari settings (rectangle icon -> Manage Extensions), allow on all websites via iOS Settings -> Apps -> Safari -> Extensions, and allow paste via iOS Settings -> Apps -> Obsidian -> Paste from other apps
See the full [troubleshooting guide](https://help.obsidian.md/web-clipper/troubleshoot) for more details.
## References
- Official Website: https://obsidian.md/clipper
- Documentation: https://help.obsidian.md/web-clipper
- Clip web pages: https://help.obsidian.md/web-clipper/capture
- Templates: https://help.obsidian.md/web-clipper/templates
- Variables: https://help.obsidian.md/web-clipper/variables
- Prompt Variables: https://help.obsidian.md/web-clipper/variables#Prompt+variables
- When to use Prompt Variables: https://help.obsidian.md/web-clipper/variables#When+to+use+prompt+variables
- Filters: https://help.obsidian.md/web-clipper/filters
- Logic: https://help.obsidian.md/web-clipper/logic
- Highlighter: https://help.obsidian.md/web-clipper/highlight
- Interpreter: https://help.obsidian.md/web-clipper/interpreter
- Troubleshooting: https://help.obsidian.md/web-clipper/troubleshoot
- Documentation source: https://github.com/obsidianmd/obsidian-help/tree/master/en/Obsidian%20Web%20Clipper
- Defuddle (content extraction library): https://github.com/kepano/defuddle
- Roadmap: https://github.com/obsidianmd/obsidian-clipper#roadmap
- Source code: https://github.com/obsidianmd/obsidian-clipper
- Community-created Web Clipper Templates
- https://github.com/obsidian-community/web-clipper-templates
- https://github.com/kepano/clipper-templates
- Web Clipper channel on Obsidian's Discord server: https://discord.com/channels/686053708261228577/1285652864089198672
- Videos
- Overview by [[Prakash Joshi Pax]]: https://www.youtube.com/watch?v=icsQeiqDa34
- Overview by [[Sascha D. Kasper]]: https://www.youtube.com/watch?v=oEtSLrfEj5o