Extract SVG icons, fonts
and colors from any site.
Parsing and export run in your browser. The page itself is fetched through our proxy, because browsers block cross-origin reads.
⚠️ Bookmarklet Note: Works on most sites. Twitter, Facebook, and other social platforms block bookmarklets due to security policies. Use the main URL input above for these sites.
How to Use Asset Extractor (Video Walkthrough)
Watch this quick tutorial before your first extraction run.
Technical
Workflow.
Handoff assets in seconds, not hours.
Scan
Paste a URL. The page and every stylesheet it links are read, then parsed for images, inline SVGs, font families and color values.
Recolor
Swap the hardcoded fills in any extracted SVG for your own brand hex, watch the change live, and copy the result out as a React component.
Export
A ZIP of the SVGs, a tailwind.config color scale, Design Tokens JSON for Figma, or a one-page brand report as PDF.
Lottie discovery
Finds Lottie player elements and animation JSON referenced in the markup, and lists the source URLs. These are candidates rather than verified Lottie files — open one before you rely on it.
Component markup
Pulls the markup for navs, headers, heroes, cards and footers, with whatever class-level CSS rules match. It is a reference for structure, not a drop-in component.
One-page brand report
Export the palette, type stack and captured icons as a PDF you can hand to a client or drop into a pitch deck. Generated in the browser from the same extraction.
When the page is
rendered by JavaScript.
Pasting a URL reads the HTML the server sends, which is empty on a React or Vue app that builds its page in the browser. The Deep Harvest bookmarklet runs inside the tab you already have open, so it reads the page after it has rendered — and reads it as you, which is what makes a staging environment or a signed-in dashboard reachable at all.
Related Guides and Tools
Continue with practical walkthroughs and complementary builders.
How to Extract SVG Icons from Websites (Free & Fast Guide)
Step-by-step workflow for extracting icons, fonts, and brand colors.
Complete Guide to Sprite Sheets for Game Developers
Understand packing, slicing, metadata, and engine import workflows.
Sprite Sheet Generator
Pack and slice sprite atlases for game workflows.
Video Background Studio
Remove, blur, or replace video backgrounds instantly.
How to extract icons, fonts and colors from a website
Six steps from a URL to files your project can use — and what to do when the first attempt comes back empty.
Paste the URL of the page carrying the assets
Extraction works on one page at a time, not a whole domain, so point it at the page that actually shows what you want. Icons usually live on a marketing page or a component gallery rather than the homepage, and a page that renders a large icon set inline is the one worth scanning.
Let it read the stylesheets, not just the HTML
Every stylesheet the page links is fetched too, and any @import inside those is followed three levels deep. That matters because most of a site's color palette and its background images live in CSS rather than in the markup — scanning HTML alone typically returns a fraction of what is there.
Work through the tabs rather than the first screen
Results are split by kind: images and inline SVGs, the color palette, font families, any Lottie references, and captured component markup. The icon set is almost always in the images tab as inline SVGs, which are the assets worth having — they scale, they recolor, and they are the ones a right-click cannot save.
Recolor an icon before you export it
Any extracted SVG can have its hardcoded fills and strokes swapped for one of your own hex values, with white, none and transparent left alone so cut-outs survive. The preview updates as you type. You can also copy the result out as a React component with the attributes already renamed to camelCase.
Take the format your codebase wants
The ZIP holds the SVG files. The tailwind.config snippet gives you the extracted palette as a color scale you can paste into a theme. The Design Tokens JSON imports into Figma through the Tokens Studio plugin. The PDF is a one-page brand summary — palette, type stack, icons — for a client or a deck.
If the page came back nearly empty, use the bookmarklet
An empty result almost always means the page builds itself in the browser, so the HTML the server sends is a shell. Drag the Deep Harvest button to your bookmarks bar, open the target page, and click it: it reads the page after it has rendered, in your own session, and hands the assets back to this tool.
What the extractor reads, and what it cannot
The page and every stylesheet it links, with @import chains followed 3 levels deep. Anything a script adds after load is outside that, which is the difference between a full result and an empty one.
| Collected | Cap | Where it comes from |
|---|---|---|
| Images and inline SVGs | 120 | img sources, srcset, lazy-load attributes, CSS background images, and inline <svg> elements |
| Font families | 30 | font-family declarations and @font-face names, generic keywords excluded |
| Colors | 40 | hex, rgb and rgba values plus CSS custom properties; pure black and white dropped |
| Lottie references | 20 | player elements and animation JSON URLs found in the markup, unverified |
| Components | 20 | navs, headers, heroes, cards, footers and similar regions, with class-level CSS |
Caps are read from the extractor itself. They exist because a large site can reference thousands of assets, and a list that long is slower to work through than the page you took it from.
- What actually gets readHTML + linked CSS, @import depth 3
- The served HTML, every stylesheet it links, and any stylesheet those import, three levels down. From that: image sources including srcset and the common lazy-loading attributes, background images referenced in CSS, inline SVG elements, font-family declarations, @font-face names, hex and rgb values, and CSS custom properties whose value is a color. What it does not read is anything a script adds after the page loads — that is the single biggest determinant of whether a scan comes back full or empty.
- Inline SVGs are the assets worth having
- An icon written directly into the markup as an <svg> element cannot be saved by right-clicking, which is why people end up looking for a tool at all. Those are captured as complete documents and are what fills the ZIP. Linked files — a .svg, .png or .webp with a URL — are listed with their source so you can take them from the origin. Very large inline SVGs are skipped on purpose, because at that size the element is usually a background illustration or a chart rather than an icon.
- Fonts come back as names, not filesfamily names only
- What is extracted is the typeface a page asks for — the font-family declarations and @font-face names — so you learn that a site sets Inter for body text and something else for headings. The font files themselves are not downloaded, and that is deliberate as much as technical: a commercial webfont licence covers the site serving it and not you. Knowing the name is what you need to license it properly or find a metric-compatible substitute.
- The palette is everything in the CSS, not a curated brand set
- Colors are pulled from hex codes, rgb values and CSS custom properties across the whole stylesheet, then deduplicated, with pure black and pure white dropped and the list capped. On a real site that includes borders, shadows, disabled states and whatever a component library shipped, so expect to prune. The custom properties are the ones to look at first: a site that defines its palette as variables has effectively labelled its own brand colors for you.
- Component capture is a reference, not a drop-in
- Navs, headers, heroes, cards, footers and similar regions are matched by role and class, and their markup is captured together with the CSS rules that match their class names directly. That last part is the limit worth knowing: rules that target a component through a descendant selector, a media query or a resolved custom property will not come along. Treat the output as a structural reference you rebuild from, not as something to paste into a project.
- Lottie results are candidates
- Animation entries come from Lottie player elements and from JSON URLs referenced in the page that look animation-related. Nothing is fetched to confirm it is really a Lottie file, so the list is a set of leads rather than verified assets. Open one before you build anything on it.
- Where the URL route stops and the bookmarklet starts
- Pasting a URL reads what the server sends. That covers most content sites and almost no single-page applications, and it stops at anything requiring a session or sitting behind bot protection. The bookmarklet runs inside a tab you already have open, so it reads the rendered page, with your cookies, using computed styles rather than parsed CSS — which is why it is the answer for a dashboard, a staging environment, or any app that renders client-side. It cannot run on sites with a strict content security policy, which is why it fails on the large social platforms.
- Extraction is not a licence
- Being able to take a file says nothing about being allowed to use it. Logos and wordmarks are trademarks whatever format you get them in; photography and illustration are usually licensed to that site alone; icon sets carried by a site often come from a library with its own attribution terms; and webfonts are licensed per site. The uses this is genuinely for are studying how something is built, rebuilding your own brand assets from your own site, auditing a client's existing palette and typography, and finding out which icon library a site uses so you can install it yourself.
Frequently asked questions
How do I extract SVG icons from a website?
Paste the page URL and open the images tab in the results. Icons written directly into the markup as <svg> elements are captured as complete files — those are the ones you cannot save by right-clicking, and they are what the ZIP download contains. Icons loaded as linked .svg files are listed with their source URL so you can take them from the origin. If nothing comes back, the page is almost certainly rendering its markup with JavaScript, and the bookmarklet is the route that works.
Why did it return nothing, or almost nothing?
Because the extractor reads the HTML the server sends, and a site built with React, Vue, Angular or Svelte often sends an empty shell that the browser fills in afterwards. There is nothing in that shell to extract. Drag the Deep Harvest bookmarklet to your bookmarks bar, open the page, and click it: it reads the page after it has rendered. The other common cause is bot protection — a Cloudflare or similar challenge means the proxy receives the challenge page rather than the site.
Can I download the actual font files?
No. What you get are the font family names the page declares, through its font-family rules and @font-face names, so you learn exactly which typefaces a site uses. The files are not downloaded. That is partly technical and mostly deliberate: a commercial webfont licence covers the site serving the font, not whoever downloads it. The name is the useful part — it tells you what to license, or what to match with a free alternative.
Is it legal to extract assets from a website?
Reading a public page is ordinary browsing; using what you find is a separate question with a different answer. Logos and wordmarks are trademarks regardless of file format. Photography, illustration and icon sets are normally licensed to the site that displays them. Webfonts are licensed per domain. Studying a build, auditing a client's existing palette, recovering your own assets from your own site, or identifying which icon library to install are all fine. Lifting a competitor's artwork into your product is not, and no tool changes that.
What does the bookmarklet do that pasting a URL does not?
It runs inside the tab you already have open, so it sees the page after JavaScript has rendered it and reads computed styles rather than parsing stylesheets. That makes three otherwise impossible cases work: single-page applications, pages that need you to be signed in, and staging or internal environments that are not reachable from outside. It cannot run on sites with a strict content security policy, which is why the large social platforms block it.
Can I extract from a page behind a login or on localhost?
With the bookmarklet, yes — it executes in your own browser session, so anything you can see, it can read, including a signed-in dashboard, a staging site or a page running on your own machine. Pasting a URL cannot do this, because the fetch happens from our server with no access to your session and no route to your local network.
What is in the ZIP download?
The SVG files from the extraction, each as a real SVG document you can open in a browser, Figma or an editor. Colors and fonts are not in the ZIP: they come out as a tailwind.config snippet you can copy or as Design Tokens JSON, because a color palette is more useful as configuration than as files in a folder.
Can I recolor the icons to match my brand?
Yes. Give it a hex value and the hardcoded fills and strokes in an extracted SVG are swapped for it, with white, none and transparent left untouched so cut-outs and knockouts survive. The preview updates live, and you can copy the recolored icon out as a React component with attributes already converted to camelCase.
How do I get the colors into Figma or Tailwind?
Two exports. The Design Tokens JSON follows the format the Tokens Studio plugin reads, so the extracted palette and type stack import straight into a Figma file. The Tailwind export is a tailwind.config fragment with the palette written out as a named color scale plus the font families, ready to paste into a theme extension.
Does it work on Twitter, Facebook, or Cloudflare-protected sites?
Usually not, in either mode. Those platforms serve a challenge or a login wall to a server-side fetch, and they set a content security policy strict enough to stop the bookmarklet executing. There is no way around that from a browser tool, and a tool claiming otherwise is worth doubting.
Is the URL I enter stored anywhere?
The URL is passed to our proxy, which fetches that page and returns the HTML — a browser cannot read a cross-origin document itself, so this step cannot happen locally. The proxy does not keep the URL or the response. Everything after that is local: parsing, recoloring, the ZIP, the tokens and the PDF all happen in your browser, and your last ten extractions are kept in your own browser storage rather than on a server. The bookmarklet route never contacts us at all.