Export Your Assets
First, you need to export your assets from Unity Asset Store. Follow these steps:
- Go to Unity Asset Store - My Assets
- Make sure you're logged in
- Press F12 to open Chrome DevTools
- Go to the Console tab
- Copy the script below and paste it in the console
- Press Enter and wait for the download
(async function(){
const endpoint = "https://assetstore.unity.com/api/graphql/batch";
// Get CSRF token from cookies
const csrf = (() => {
for (let c of document.cookie.split(";")) {
let [n, v] = c.trim().split("=");
if (n === "_csrf") return decodeURIComponent(v);
}
return null;
})();
if (!csrf) {
console.error("CSRF token not found! Make sure you're logged in.");
return;
}
// GraphQL query
const query = `query SearchMyAssets($page: Int, $pageSize: Int, $q: [String],
$tagging: [String!], $assignFrom: [String!], $ids: [String!],
$sortBy: Int, $reverse: Boolean, $other: String) {
searchMyAssets(page: $page, pageSize: $pageSize, q: $q, tagging: $tagging,
assignFrom: $assignFrom, ids: $ids, sortBy: $sortBy, reverse: $reverse,
other: $other) {
results {
id orderId grantTime tagging assignFrom
product {
id productId itemId name
mainImage { icon75 icon __typename }
publisher { id name __typename }
publishNotes state
currentVersion { name publishedDate __typename }
downloadSize __typename
}
__typename
}
total __typename
}
}`;
// Fetch a page of assets with optional tagging filter
async function fetchPage(page, tagging = []) {
const response = await fetch(endpoint, {
method: "POST",
headers: {
"Content-Type": "application/json;charset=UTF-8",
"Accept": "application/json, text/plain, */*",
"x-csrf-token": csrf,
"x-requested-with": "XMLHttpRequest",
"x-source": "storefront",
"operations": "SearchMyAssets"
},
credentials: "include",
body: JSON.stringify([{
query: query,
variables: {
page: page,
pageSize: 100,
q: [],
tagging: tagging,
ids: [],
assignFrom: [],
sortBy: 7
},
operationName: "SearchMyAssets"
}])
});
return (await response.json())[0];
}
// Fetch all pages for a given tagging filter
async function fetchAll(label, tagging) {
console.log("Fetching " + label + "...");
let first = await fetchPage(0, tagging);
let total = first.data.searchMyAssets.total;
let pages = Math.ceil(total / 100);
let assets = [...first.data.searchMyAssets.results];
for (let p = 1; p < pages; p++) {
console.log(label + " page " + (p + 1) + "/" + pages);
let d = await fetchPage(p, tagging);
assets.push(...d.data.searchMyAssets.results);
await new Promise(r => setTimeout(r, 300));
}
console.log("Found " + assets.length + " " + label);
return assets;
}
// Fetch visible + hidden assets
let visible = await fetchAll("visible assets", []);
let hidden = await fetchAll("hidden assets", ["#BIN"]);
let allAssets = [...visible, ...hidden];
// Fetch wishlist: saved cart + favorites
console.log("Fetching wishlist...");
let wishlistItems = [];
try {
let userId = (() => {
for (let c of document.cookie.split(";")) {
let [n, v] = c.trim().split("=");
if (n.trim() === "LS") return v.split("-")[0];
}
return null;
})();
// Fetch saved cart
let cartRes = await fetch(endpoint, {
method: "POST",
headers: {
"Content-Type": "application/json;charset=UTF-8",
"Accept": "application/json, text/plain, */*",
"x-csrf-token": csrf,
"x-requested-with": "XMLHttpRequest",
"x-source": "storefront",
"operations": "ShoppingCartQuery"
},
credentials: "include",
body: JSON.stringify([{
query: 'query ShoppingCartQuery {\n currentCart(namespace: "asset_store_saved_cart") {\n id\n cartId\n items {\n id\n product {\n id\n name\n mainImage { icon icon75 __typename }\n publisher { id name __typename }\n state\n __typename\n }\n __typename\n }\n __typename\n }\n}\n',
operationName: "ShoppingCartQuery"
}])
});
let cartData = await cartRes.json();
let cartItems = cartData[0]?.data?.currentCart?.items || [];
for (let item of cartItems) {
if (item.product) wishlistItems.push(item.product);
}
// Fetch favorites (separate request)
let favRes = await fetch(endpoint, {
method: "POST",
headers: {
"Content-Type": "application/json;charset=UTF-8",
"Accept": "application/json, text/plain, */*",
"x-csrf-token": csrf,
"x-requested-with": "XMLHttpRequest",
"x-source": "storefront",
"operations": "ListDetail"
},
credentials: "include",
body: JSON.stringify([{
query: 'query ListDetail {\n listDetail(listId: "favorite") {\n packages(size: 200) {\n results {\n ...product\n __typename\n }\n total\n __typename\n }\n __typename\n }\n}\nfragment product on Product {\n id productId itemId slug name\n publisher { id name __typename }\n mainImage { icon75 icon __typename }\n originalPrice { originalPrice finalPrice isFree currency __typename }\n state\n __typename\n }\n',
operationName: "ListDetail"
}])
});
let favData = await favRes.json();
let favItems = favData[0]?.data?.listDetail?.packages?.results || [];
// Deduplicate by id
let existingIds = new Set(wishlistItems.map(i => i.id));
for (let item of favItems) {
if (!existingIds.has(item.id)) wishlistItems.push(item);
}
console.log("Found " + wishlistItems.length + " wishlist items");
} catch(e) {
console.log("Could not fetch wishlist:", e.message);
}
// Create download
let exportData = [{
data: {
searchMyAssets: { count: allAssets.length, results: allAssets },
wishlist: { count: wishlistItems.length, results: wishlistItems }
}
}];
let blob = new Blob([JSON.stringify(exportData, null, 2)], {
type: "application/json"
});
let a = document.createElement("a");
a.href = URL.createObjectURL(blob);
a.download = "myassets.json";
a.click();
console.log("Downloaded " + allAssets.length + " assets (" + visible.length + " visible + " + hidden.length + " hidden) + " + wishlistItems.length + " wishlist items!");
})();
Upload Your Assets File
Upload the myassets.json file you just downloaded:
Drop your myassets.json here
or
Scan Results
Upload your assets file to see the scan results