Roll20 uses cookies to improve your experience on our site. Cookies enable you to enjoy certain features, social sharing functionality, and tailor message and display ads to your interests on our site and others. They also help us understand how our site is being used. By continuing to use our site, you consent to our use of cookies. Update your cookie preferences .
×

Search Results in Roll20 Editor Produce Skewed Results For Common Tags

1567781151

Edited 1567782019
Lueliya
Marketplace Creator
Sometimes when I search for assets using the Roll20 Editor search, I get results that seem to prioritize something else over any keywords I may have entered. Specifically, the results are also so heavily skewed in favor of some packs over others that the results of just one single pack may be displayed instead of results that are potentially more relevant. As such, I believe the search algorithm is not functioning as intended. For example: When I go to the roll20 editor and search for "tree" under "Maps, Tiles, Textures," I get 100/100 search results *exclusively* from Gabriel Pickard's "Vile Tiles: Forest Mapper 1" Pack. Moreover, large chunks of the search results are not even tagged "tree"-- such as the boulders, caves, and cliffs that show up in the result. There are some bushes in the search results that are, in fact, tagged "tree," but none of the trees in the pack show up in the search result either, most likely because they are alphabetically after the boulders, bushes, caves, and cliffs in the pack and thus are simply truncated from the search results. Likewise, boulders show up in the search result before bushes do, even though the bushes are tagged "tree," while the boulders are not. PLEASE NOTE: Reproducing this might not work properly if you already own the "Vile Maps: Forest Mapper 1" pack. Also, the same thing occurs when searching for "Everything" as when searching for "Maps, Tiles, Textures." I have noticed similar cases with other common search terms as well (e.g., poison, cliff, water), in which the results are heavily dominated by just a few packs, with results of varying relevance within those packs (though results tend to be more relevant than not). The "tree" search, however, is most notable because of the fact that it only displays items from a single pack, many of which don't have tags that match the keyword.&nbsp; Most importantly though, the search function claims to search by keyword, but it is clearly weighting something (potentially popularity) higher than keyword in some searches.&nbsp; Testing was performed on several machines and browsers, all of which produced the same results. They are as follows: Setup 1 Chrome 76 Browser Addons/Extensions: all disabled ChromeOS Setup 2 (console log included) Chrome 76 Browser Addons/Extensions: all disabled Windows 7 Setup 3 Firefox Quantum 63.0.3 (64-bit) Browser Addons/Extensions: none Windows 7 Console Log app.roll20.net/:12 Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval' https://*.googlesyndication.com https://*.doubleclick.net <a href="https://partner.googleadservices.com" rel="nofollow">https://partner.googleadservices.com</a> <a href="https://www.googletagservices.com" rel="nofollow">https://www.googletagservices.com</a> <a href="https://ssl.google-analytics.com" rel="nofollow">https://ssl.google-analytics.com</a> <a href="https://www.google-analytics.com" rel="nofollow">https://www.google-analytics.com</a> <a href="https://ajax.googleapis.com" rel="nofollow">https://ajax.googleapis.com</a> <a href="http://ajax.googleapis.com" rel="nofollow">http://ajax.googleapis.com</a> <a href="https://d3clqjduf2gvxg.cloudfront.net" rel="nofollow">https://d3clqjduf2gvxg.cloudfront.net</a> <a href="https://cdn.firebase.com" rel="nofollow">https://cdn.firebase.com</a> https://*.firebaseio.com https://*.tokbox.com https://*.opentok.com <a href="http://static.opentok.com" rel="nofollow">http://static.opentok.com</a> <a href="http://www.google-analytics.com" rel="nofollow">http://www.google-analytics.com</a> <a href="http://cdn.crowdin.com" rel="nofollow">http://cdn.crowdin.com</a> <a href="https://crowdin.com" rel="nofollow">https://crowdin.com</a> <a href="http://stun.l.google.com" rel="nofollow">http://stun.l.google.com</a> ". Either the 'unsafe-inline' keyword, a hash ('sha256-YqRnjBbbIf0aS2bv7PXNuhC3k1sJ6sFmO1BhiTY9WZ4='), or a nonce ('nonce-...') is required to enable inline execution. app.roll20.net/:13 Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval' https://*.googlesyndication.com https://*.doubleclick.net <a href="https://partner.googleadservices.com" rel="nofollow">https://partner.googleadservices.com</a> <a href="https://www.googletagservices.com" rel="nofollow">https://www.googletagservices.com</a> <a href="https://ssl.google-analytics.com" rel="nofollow">https://ssl.google-analytics.com</a> <a href="https://www.google-analytics.com" rel="nofollow">https://www.google-analytics.com</a> <a href="https://ajax.googleapis.com" rel="nofollow">https://ajax.googleapis.com</a> <a href="http://ajax.googleapis.com" rel="nofollow">http://ajax.googleapis.com</a> <a href="https://d3clqjduf2gvxg.cloudfront.net" rel="nofollow">https://d3clqjduf2gvxg.cloudfront.net</a> <a href="https://cdn.firebase.com" rel="nofollow">https://cdn.firebase.com</a> https://*.firebaseio.com https://*.tokbox.com https://*.opentok.com <a href="http://static.opentok.com" rel="nofollow">http://static.opentok.com</a> <a href="http://www.google-analytics.com" rel="nofollow">http://www.google-analytics.com</a> <a href="http://cdn.crowdin.com" rel="nofollow">http://cdn.crowdin.com</a> <a href="https://crowdin.com" rel="nofollow">https://crowdin.com</a> <a href="http://stun.l.google.com" rel="nofollow">http://stun.l.google.com</a>". Either the 'unsafe-inline' keyword, a hash ('sha256-JeWbh0DatVbnZhQNBSXTdn1mQkTkdb72YVLCn8c2k88='), or a nonce ('nonce-...') is required to enable inline execution. jquery.migrate.js:20 JQMIGRATE: Logging is active app.roll20.net/:4530 Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval' https://*.googlesyndication.com https://*.doubleclick.net <a href="https://partner.googleadservices.com" rel="nofollow">https://partner.googleadservices.com</a> <a href="https://www.googletagservices.com" rel="nofollow">https://www.googletagservices.com</a> <a href="https://ssl.google-analytics.com" rel="nofollow">https://ssl.google-analytics.com</a> <a href="https://www.google-analytics.com" rel="nofollow">https://www.google-analytics.com</a> <a href="https://ajax.googleapis.com" rel="nofollow">https://ajax.googleapis.com</a> <a href="http://ajax.googleapis.com" rel="nofollow">http://ajax.googleapis.com</a> <a href="https://d3clqjduf2gvxg.cloudfront.net" rel="nofollow">https://d3clqjduf2gvxg.cloudfront.net</a> <a href="https://cdn.firebase.com" rel="nofollow">https://cdn.firebase.com</a> https://*.firebaseio.com https://*.tokbox.com https://*.opentok.com <a href="http://static.opentok.com" rel="nofollow">http://static.opentok.com</a> <a href="http://www.google-analytics.com" rel="nofollow">http://www.google-analytics.com</a> <a href="http://cdn.crowdin.com" rel="nofollow">http://cdn.crowdin.com</a> <a href="https://crowdin.com" rel="nofollow">https://crowdin.com</a> <a href="http://stun.l.google.com" rel="nofollow">http://stun.l.google.com</a>". Either the 'unsafe-inline' keyword, a hash ('sha256-vileAyXucIHIT+3pbOzFP62jSSQqBYQ/DZ/WZAa5v4Y='), or a nonce ('nonce-...') is required to enable inline execution. app.js?1566922725:541 70 app.js?1566922725:543 TOUCH SUPPORTED: false app.js?1566922725:543 USING WEBGL ACCELERATION... app.js?1566922725:543 WEBGL STARTUP SUCCESS app.js?1566922725:536 select app.js?1566922725:536 Switch mode to select app.js?1566922725:557 Initializing new dice engine with randomness... app.js?1566922725:557 Using random entropy app.js?1566922725:563 window resize app.js?1566922725:543 Final set zoom! app.js?1566922725:542 UPDATE GL SIZE! app.js?1566922725:543 Final set zoom! tutorial_tips.js:7 tuts loaded app.js?1566922725:551 Final page load. app.js?1566922725:563 Refresh jukebox List! app.js?1566922725:549 Auth'ed. app.js?1566922725:549 Go post auth! app.js?1566922725:549 initial setup app.js?1566922725:547 T.i&nbsp;{attributes: {…}, _escapedAttributes: {…}, cid: "c0", changed: {…}, _silent: {…},&nbsp;…} app.js?1566922725:555 refershing page listings! app.js?1566922725:549 Got players value... app.js?1566922725:550 joining game... app.js?1566922725:547 Full load page! app.js?1566922725:549 We have 1 pages app.js?1566922725:548 Global Volume: 100=1 app.js?1566922725:550 Deferred finish joining... app.js?1566922725:541 Firebase Online app.js?1566922725:549 handle page changes app.js?1566922725:549 false app.js?1566922725:555 refershing page listings! app.js?1566922725:550 init active page! app.js?1566922725:547 activate page! app.js?1566922725:547 FULLY ACTIVATE VIEWS FOR PAGE. app.js?1566922725:547 Graphics: 0 app.js?1566922725:547 Paths: 0 app.js?1566922725:547 Reorder by ZORDER app.js?1566922725:551 Scan for new plays! app.js?1566922725:555 refershing page listings! app.js?1566922725:570 DOMException t.errorLog @ app.js?1566922725:570 (anonymous) @ app.js?1566922725:571 (anonymous) @ app.js?1566922725:328 o.raiseReject @ app.js?1566922725:328 o.raiseRejects @ app.js?1566922725:328 o.reject @ app.js?1566922725:328 (anonymous) @ app.js?1566922725:328 o.raiseReject @ app.js?1566922725:328 o.raiseRejects @ app.js?1566922725:328 o.reject @ app.js?1566922725:328 (anonymous) @ app.js?1566922725:571 (anonymous) @ app.js?1566922725:328 o.raiseReject @ app.js?1566922725:328 o.raiseRejects @ app.js?1566922725:328 o.reject @ app.js?1566922725:328 (anonymous) @ app.js?1566922725:328 o.raiseReject @ app.js?1566922725:328 o.raiseRejects @ app.js?1566922725:328 o.reject @ app.js?1566922725:328 (anonymous) @ app.js?1566922725:331 (anonymous) @ app.js?1566922725:328 o.raiseReject @ app.js?1566922725:328 o.raiseRejects @ app.js?1566922725:328 o.reject @ app.js?1566922725:328 (anonymous) @ app.js?1566922725:338 (anonymous) @ app.js?1566922725:328 o.raiseReject @ app.js?1566922725:328 o.raiseRejects @ app.js?1566922725:328 o.reject @ app.js?1566922725:328 (anonymous) @ app.js?1566922725:339 (anonymous) @ app.js?1566922725:328 o.raiseReject @ app.js?1566922725:328 o.raiseRejects @ app.js?1566922725:328 o.reject @ app.js?1566922725:328 d @ app.js?1566922725:339 Promise.catch (async) __webRtcLocalMediaInitialized.window.navigator.navigator.mediaDevices.navigator.mediaDevices.getUserMedia.navigator.fmGetUserMedia @ app.js?1566922725:339 r.doGetUserMedia @ app.js?1566922725:339 r.doGetUserMedia @ app.js?1566922725:339 r.doStartInternal @ app.js?1566922725:339 (anonymous) @ app.js?1566922725:339 (anonymous) @ app.js?1566922725:328 setTimeout (async) e.dispatch @ app.js?1566922725:328 r.doStart @ app.js?1566922725:339 o.startInternal @ app.js?1566922725:338 o.start @ app.js?1566922725:338 i.start @ app.js?1566922725:331 (anonymous) @ app.js?1566922725:571 Promise.then (async) (anonymous) @ app.js?1566922725:571 (anonymous) @ app.js?1566922725:328 o.raiseResolve @ app.js?1566922725:328 o.process @ app.js?1566922725:328 i.then @ app.js?1566922725:328 t.startLocalMedia @ app.js?1566922725:571 (anonymous) @ app.js?1566922725:571 c @ firebase.2.4.0.js:240 (anonymous) @ firebase.2.4.0.js:201 gc @ firebase.2.4.0.js:52 cc @ firebase.2.4.0.js:30 dc @ firebase.2.4.0.js:29 h.Kb @ firebase.2.4.0.js:220 h.Ld @ firebase.2.4.0.js:188 Eh.Ld @ firebase.2.4.0.js:178 (anonymous) @ firebase.2.4.0.js:176 yh @ firebase.2.4.0.js:170 La.onmessage @ firebase.2.4.0.js:169 Show 5 more frames app.js?1566922725:563 Refresh jukebox List! Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. Mixed Content: The page at '&lt;URL&gt;' was loaded over HTTPS, but requested an insecure image '&lt;URL&gt;'. This content should also be served over HTTPS. images:1 GET <a href="http://t1.gstatic.com/images?q=tbn:ANd9GcR2Mm9KHEmQ03UxR2UhkoLf6K_SeFis0CqGO1DDCCKFQapA3Ha1YJhtl_Kz" rel="nofollow">http://t1.gstatic.com/images?q=tbn:ANd9GcR2Mm9KHEmQ03UxR2UhkoLf6K_SeFis0CqGO1DDCCKFQapA3Ha1YJhtl_Kz</a> 404 (Not Found) Image (async) buildFragment @ jquery-1.9.1.js:6469 domManip @ jquery-1.9.1.js:6129 append @ jquery-1.9.1.js:5949 callback @ app.js?1566922725:569 a @ base.js?1566922720:20 fire @ jquery-1.9.1.js:1037 fireWith @ jquery-1.9.1.js:1148 done @ jquery-1.9.1.js:8074 callback @ jquery-1.9.1.js:8598 XMLHttpRequest.send (async) send @ jquery-1.9.1.js:8526 ajax @ jquery-1.9.1.js:7978 jQuery.&lt;computed&gt; @ jquery-1.9.1.js:7614 s @ base.js?1566922720:20 (anonymous) @ base.js?1566922720:20 each @ jquery-1.9.1.js:648 each @ jquery-1.9.1.js:270 t.fn.infinitescroll @ base.js?1566922720:20 (anonymous) @ app.js?1566922725:569 fire @ jquery-1.9.1.js:1037 fireWith @ jquery-1.9.1.js:1148 done @ jquery-1.9.1.js:8074 callback @ jquery-1.9.1.js:8598 XMLHttpRequest.send (async) send @ jquery-1.9.1.js:8526 ajax @ jquery-1.9.1.js:7978 jQuery.&lt;computed&gt; @ jquery-1.9.1.js:7614 h @ app.js?1566922725:569 r @ base.js?1566922720:6 setTimeout (async) (anonymous) @ base.js?1566922720:6 (anonymous) @ app.js?1566922725:568 dispatch @ jquery-1.9.1.js:3074 elemData.handle @ jquery-1.9.1.js:2750 images:1 GET <a href="http://t1.gstatic.com/images?q=tbn:ANd9GcSxQTtvDk_6N3FKOg4D7tGf368UmnrBFv-r1rpKT1KgG18bpjS-_UorueWr" rel="nofollow">http://t1.gstatic.com/images?q=tbn:ANd9GcSxQTtvDk_6N3FKOg4D7tGf368UmnrBFv-r1rpKT1KgG18bpjS-_UorueWr</a> 404 (Not Found) Image (async) buildFragment @ jquery-1.9.1.js:6469 domManip @ jquery-1.9.1.js:6129 append @ jquery-1.9.1.js:5949 callback @ app.js?1566922725:569 a @ base.js?1566922720:20 fire @ jquery-1.9.1.js:1037 fireWith @ jquery-1.9.1.js:1148 done @ jquery-1.9.1.js:8074 callback @ jquery-1.9.1.js:8598 XMLHttpRequest.send (async) send @ jquery-1.9.1.js:8526 ajax @ jquery-1.9.1.js:7978 jQuery.&lt;computed&gt; @ jquery-1.9.1.js:7614 s @ base.js?1566922720:20 (anonymous) @ base.js?1566922720:20 each @ jquery-1.9.1.js:648 each @ jquery-1.9.1.js:270 t.fn.infinitescroll @ base.js?1566922720:20 (anonymous) @ app.js?1566922725:569 fire @ jquery-1.9.1.js:1037 fireWith @ jquery-1.9.1.js:1148 done @ jquery-1.9.1.js:8074 callback @ jquery-1.9.1.js:8598 XMLHttpRequest.send (async) send @ jquery-1.9.1.js:8526 ajax @ jquery-1.9.1.js:7978 jQuery.&lt;computed&gt; @ jquery-1.9.1.js:7614 h @ app.js?1566922725:569 r @ base.js?1566922720:6 setTimeout (async) (anonymous) @ base.js?1566922720:6 (anonymous) @ app.js?1566922725:568 dispatch @ jquery-1.9.1.js:3074 elemData.handle @ jquery-1.9.1.js:2750 images:1 GET <a href="http://t2.gstatic.com/images?q=tbn:ANd9GcSmm4PqrwsDG62hZ5tQotMVaaI8sYDtD3XdNC1677v8GDkswUmEFZHKAy9Y" rel="nofollow">http://t2.gstatic.com/images?q=tbn:ANd9GcSmm4PqrwsDG62hZ5tQotMVaaI8sYDtD3XdNC1677v8GDkswUmEFZHKAy9Y</a> 404 (Not Found) Image (async) buildFragment @ jquery-1.9.1.js:6469 domManip @ jquery-1.9.1.js:6129 append @ jquery-1.9.1.js:5949 callback @ app.js?1566922725:569 a @ base.js?1566922720:20 fire @ jquery-1.9.1.js:1037 fireWith @ jquery-1.9.1.js:1148 done @ jquery-1.9.1.js:8074 callback @ jquery-1.9.1.js:8598 XMLHttpRequest.send (async) send @ jquery-1.9.1.js:8526 ajax @ jquery-1.9.1.js:7978 jQuery.&lt;computed&gt; @ jquery-1.9.1.js:7614 s @ base.js?1566922720:20 (anonymous) @ base.js?1566922720:20 each @ jquery-1.9.1.js:648 each @ jquery-1.9.1.js:270 t.fn.infinitescroll @ base.js?1566922720:20 (anonymous) @ app.js?1566922725:569 fire @ jquery-1.9.1.js:1037 fireWith @ jquery-1.9.1.js:1148 done @ jquery-1.9.1.js:8074 callback @ jquery-1.9.1.js:8598 XMLHttpRequest.send (async) send @ jquery-1.9.1.js:8526 ajax @ jquery-1.9.1.js:7978 jQuery.&lt;computed&gt; @ jquery-1.9.1.js:7614 h @ app.js?1566922725:569 r @ base.js?1566922720:6 setTimeout (async) (anonymous) @ base.js?1566922720:6 (anonymous) @ app.js?1566922725:568 dispatch @ jquery-1.9.1.js:3074 elemData.handle @ jquery-1.9.1.js:2750
1567789219
Lueliya
Marketplace Creator
Oof, that is not good news, though I guess it can't be helped if it is too costly. Out of curiosity, does the general Marketplace search also suffer from these problems?
1567789640

Edited 1567789754
Lueliya
Marketplace Creator
Is it also out of budget to develop a simple search algorithm of your own (but for premium assets/Roll20 assets only)? I am not particularly well-versed in search engines, but is there a reason it wouldn't work to just make a basic keyword search that excluded all other factors (popularity, etc.)? I think there should also be some options to create simple search engines using vector space or some kind of artificial neural network to make associations between keywords.
1567791536
DarkDeer
Forum Champion
Marketplace Creator
Compendium Curator
Hi Lueliya - A redesign of the in-app search is absolutely on our list of future improvements for the VTT. While it's not in the current dev cycle, we are aware of the issues with search based on the old API results.&nbsp; As far as the Marketplace is concerned - last week we launched a HUGE update not only to the UI, but the entire tagging and searching system (I hope you've been getting our creator emails, by the way!) The in-app search and Marketplace search are completely different systems, with the Marketplace search being recently vastly improved. You shouldn't experience any of that old data in the new search :)
1567793263

Edited 1567793551
Lueliya
Marketplace Creator
Yes, I've heard about the new Marketplace Update-- it seems like a huge improvement!&nbsp; That being said, as a Marketplace Creator myself, my primary concerns are visibility and exposure for my tile packs. At least among my social circles, there aren't many people that use the Marketplace Search itself though. Instead, they prefer to use only the in-app search because it is more convenient. That's why it worries me a lot that the in-app search doesn't work quite right. I am glad, however, to hear that you guys are aware of the problems with the in-app search. I hope that in a dev-cycle in the near future, you will be able to update and improve the in-app search! I think it would improve the Roll20 experience for many people, but especially for DMs that like to build their maps from scratch and Marketplace Creators.
1567807514
DarkDeer
Forum Champion
Marketplace Creator
Compendium Curator
Thank you for understanding, and just for clarity - The prior mod post has been deleted because it contained information less related to your query - the quoted information was only relevant to the Google based searches you'll see in-app. Due to amazing and prolific Roll20 Marketplace creators (such as yourself) our algorithm has not properly kept up and doesn't provide as good of a search experience as we would like in-app. We prioritized the update for the Marketplace search, as our data shows that Roll20 users overwhelmingly use the Marketplace for discovering new products and token sets, and use that system for their purchases. Just for my own curiosity as the key stakeholder for the Roll20 Marketplace, is the in-app search the way that you find new creators on Roll20? As our internal data shows that the Marketplace page is the biggest vector for sales, I'm really interested in the other ways folks use the site :)
As Lueliya's DM a lot of the time, I use Google to find a handful of tiles before I try using the Marketplace search. I almost never use the In-app search because it either comes up with nothing but Google searches or irrelevant tiles for what I'm looking for.
1567810569

Edited 1567814078
Lueliya
Marketplace Creator
To be honest, I haven't done much in the way of purchasing from the Marketplace (from the in-app search or otherwise) because I don't DM many games. As such, I have asked some of my friends (who do make a lot of Marketplace purchases) to respond to your question in more detail. Now, as someone who is less experienced at finding Marketplace assets in the first place: the first thing I did after my pack was released was to see if/how/under what conditions it appeared in the in-app search. This is because the in-app search is the first place I would have thought to search for new tiles as someone who doesn't normally make as many purchases. I think there are many people who would also start in the in-app search, and then try the Marketplace only after being unable to find what they are looking for using the in-app search. I think the only time I would have thought to start &nbsp;with the Marketplace would be if I knew beforehand that I wanted to make a purchase. Otherwise, I would always start in the in-app search first, look through the free assets there, then the premium assets in the search, and then finally the Marketplace. As for why you might not find what you want using the in-app search-- as I mentioned in my original post, your search results are always essentially dominated by like 1 - 3 different well-known packs. If you aren't happy with the art in those packs, then well... you're out of luck, which will lead you to either (1) stick with the free assets, or (2) go to the Marketplace to make a purchase instead. For what it's worth, I actually made a post in the Suggestions forum discussing (non bug/technical) problems with and potential improvement for the in-app search earlier today (prior to getting responses on this post). It isn't really possible to find "new creators" using the in-app search though, because the search results seem to be popularity related, and they really only show results from a few already well-known creators. That being said, if the in-app search worked more efficiently, I think it would be much more popular and it would definitely make it much easier for people to find new creators. When I have tried DM'ing things, it didn't even occur to me to use the Marketplace (though I might be more likely to use it if there were a link in the in-app search with a more extended search result for what I could already find in the in-app search). The in-app search was much more convenient (that is, it was right there in my map editor, so why go somewhere else? and I could use it to look directly for individual tiles, and get previews for those tiles without having to open a new window each time.
As terrible as the in app search bar is it's what I mostly use. Or... used, rather. It rarely gives me what I want. I think I've used the market place... like... Twice? Throughout my entire six year stay here on roll20. As in... visited it twice. I found tilesets that I wanted via the in app search bar. I think today is the first time I am using the forum though I might have made one other forum post. I don't know what other people's experience is but for me personally. The rest of the site outside of the VTT might as well not exist.&nbsp; But it seems that my experience is not the majority experience. Today I mostly use what tiles I already have. I've mostly given up on finding new things. I do want to point out though, that this is usually enough to host whatever I want to host. Overall I'd say I am pretty happy with what I have managed to find though.