February 21, 2026 · 16 min read

engineering product business

The Creation of an Algorithm

We serve over 164,266 artists on EntryThingy today. The biggest issue we have is that of every artist who has ever submitted to a show on our platform, 95% have only ever submitted to one art gallery. They came, applied to one show, and we never saw them again.

Most artists we interact with don't think of themselves as call-seekers on our platform. They think of themselves as artists who submit to their gallery. This doesn't mean they are averse to finding more calls. They just haven't thought of EntryThingy as a destination to apply to calls. Getting them to apply anywhere else, even if they want to, requires someone to put the right show in front of them at the right time. There aren't a lot of tools out there that do that proactively. So we built one.


TikTok's Algorithm Doesn't Work (For Us!)

The first thing you have to understand about building this is that we are not TikTok or Netflix. We don't have near-infinite inventory. Art shows expire: galleries accept applications for a window, then close. We can't recommend the show that closed last month. The inventory is also split between internal calls we run on the platform and external calls we scrape in. Both have deadlines. Both disappear.

What that means is that TikTok physics just don't apply here. TikTok works because it has billions of videos and enough implicit behavioral signals (scroll depth, view time, shares, replays) to train a model that knows more about you than you know about yourself. We have a way for artists to bookmark a call. We have emails when they have questions. We have applications. That's it. There's not enough inventory to have statistically significant implicit signals. The whole approach has to be different.

For explicit signals, there is also not enough data on an artist-by-artist basis. When they apply to a single show, we can't make too many leaps to figure out the next show. The data isn't there!

Also- the mediums artists participate in can create more of a gap compared to a TikTok or movie presence. I may not love certain types of comedy, but I can certainly be recommended them. I may even watch! But artists won't participate in shows which don't match their medium. For example, if you are a photographer, you won't consider a show based on ceramics.

Justin suggested 80/20ing our algorithm: location and medium.

Show artists calls that are in their area and match what they make. We had plenty of data to get started.


Location: Harder Than It Looks, But Not That Hard

There are two ways to figure out where an artist is.

You can ask. This is the easiest by far. We ask at signup, and any time we surface the algorithm, we make it clear that artists can edit their location settings. Self-selection is the most accurate signal we have. It's our preferred method.

You can infer. By looking at the calls an artist has applied to historically, you can make a pretty good guess. If someone has applied to ten shows in Texas, we'll say they're from Texas. This turned out to be extraordinarily useful, because many artists who signed up years ago never provided state information. We needed a way to say: if you've applied to a lot of shows in one area, we'll assume that's your area. Artists can change this at any time.

Colin had the brilliant idea of going a level deeper and focusing on major cities. Location gets messy when you infer it, because some states are enormous. "California" is doing a lot of work. If you're from Los Angeles, you're probably not applying to calls in Northern California. In fact, because Los Angeles has so many calls, you're almost certainly applying to things around LA specifically. So we mapped out major metropolitan areas and used the Haversine formula to calculate proximity: within 50 miles of a major city center gets you matched to that metro. This was a significant signal improvement.

We also allow multiple states. This sounds a little weird at first, but less so once you think about border cities. An artist on the Nevada-Arizona border might want shows from both states. Many artists are willing to drive a couple hours if it's the right show. We give them the option to say so.

The First Version Was a Disaster

Before any of this, we tried US regions. Northeast, Southeast, Southwest, etc. Fewer buckets, simpler logic, faster to ship. Seemed reasonable.

An artist from Florida started getting shown a call in Virginia. Both were "South."

We reversed it within two days. The lesson was obvious in retrospect: artists think about location at the state and city level, not the regional level. I grew up in Rhode Island. The chances of me driving to Vermont for an art show are essentially zero, even though we're technically in the same region. Our first attempt was too broad. Our second was too brittle. Our third was just right.

US regions map showing the first version of location groupings


Medium: This Is Where It Gets Complicated

Medium is harder than location. A lot harder.

Photography is obvious. Painting is obvious. But what about someone who does painting on ceramics: are they a painter or a ceramicist? What about mixed media artists who work across five categories? What counts as mixed media? There is so much here...the longer tail of mediums stretches around the corner, and artists are often hard to pin down. We offer 37 distinct medium options across the system so people can specify what their medium really is, and even that's not always enough.

For artists who signed up without providing medium information, we backfilled using three layers:

  1. Past applications. If they entered a category that mapped to one of ours (painting), we called them a painter.
  2. Their own descriptions. If "watercolor" showed up multiple times across their artist statements, we used that.
  3. The calls they applied to. If we couldn't get anything from the artist directly, we looked at what the organizer described the call as. Applied to three photography shows? We'll assume photographer until you tell us otherwise.

This is far from perfect. Artists can work in multiple mediums simultaneously. Someone's practice might shift between the time they signed up and now. So we also send follow-up emails: "We think you're a ceramicist in Washington. Is that right?" It creates another feedback loop where people can correct us.

Notice that this is a little unfair to online-only galleries. If you're an online gallery, you don't have a location, so you're automatically starting from behind. We recognize that. But the data is clear: artists care deeply about physical locations. They want to see their work shown somewhere. So that's the decision we made.

The Vocabulary Problem Nobody Warned Us About

Here's something we didn't fully appreciate until we were deep in the data: there are effectively seven separate medium vocabularies in our system. Artists pick from 37 distinct artist-side mediums. Our extraction for call metadata outputs 26 call medium categories. We have synonym mappings trying to bridge the two. And there are dead ends on both sides: four artist mediums (Installation, Metalwork, Performance, Video) normalize to "Other" internally and can never produce a match. Several call mediums are effectively unreachable because no artist selection maps to them.

Netflix has a taxonomy team of 30 people whose entire job is maintaining genre tags. We had competing vocabularies that grew organically over years. It's a real problem we're still working through.

"All Mediums Accepted" Doesn't Count

One philosophical decision worth calling out: a call that says "all mediums welcome" is not a medium match. It goes into the general tier.

This was deliberate. If a call accepts everything, medium overlap tells you nothing about fit. "Perfect match" has to mean something. Popularity is not the same as relevance, and we didn't want every ceramicist getting recommended a call just because the organizer checked every box.

The Bigger Problem: Most Calls Have No Medium At All

Here's the uncomfortable number: 85.4% of our active calls have no medium requirement specified whatsoever. That means for the vast majority of what's in our inventory, the medium matching rule simply can't fire. The algorithm falls back entirely to location.

This isn't a scoring problem. It's a data quality problem, and we're working on it, both by improving how we collect medium info from galleries and by using AI extraction to infer it from call descriptions. But it's worth being honest about: the medium layer of this algorithm is working with 15% of our active inventory right now.

The Results

Between location and medium, we're able to profile about 92% of our opted-in artists. There's an 8% subsection who have a medium we couldn't figure out, or who chose not to provide state information (mostly legacy users). About 99% had either a location or a medium. Not bad as a starting point.


The Rules Engine

V1: If/Then

The first version of the matching logic was pure if/then. If you're in the same state, and if your medium overlaps, show the call. We built the MVP in about a day. It worked well enough to validate the concept.

The problem with if/then is that it doesn't scale gracefully. Once you add a third condition, the nesting becomes hard to reason about. Once you add a fourth (city-level logic, medium specificity, deadline urgency, internal vs. external ranking) it collapses. The logic becomes a bug waiting to happen.

V2: Points

We moved to a rules-based engine where each criterion fires independently and contributes to a total score:

Rule Points When It Fires
City Proximity 10 Within 50 miles of the artist's metro
State Match 9 Call is in one of the artist's priority states
Medium Match 7 At least one medium overlaps
Deadline Urgency 5 Closing within 7 days

Score thresholds:

One critical design decision: the Deadline Urgency rule only fires if another rule already fired. A call that scores zero on location and medium cannot be boosted into your feed just because it closes soon. Urgency amplifies a match. It doesn't manufacture one.

When two calls score equally, internal calls rank above scraped external ones. I'll be honest about why: we control the application experience for internal calls, we earn revenue from them, and we get analytics that help us improve the algorithm. It's a business decision embedded in the algorithm. I think it's the right call, but I'd rather be transparent about it than pretend it's purely algorithmic.

The big benefit of a rules engine is that it's easy to extend. Want to add a rule for call type: museum vs. for-profit gallery vs. nonprofit? One new rule, clean implementation, no nested spaghetti. That extensibility has already paid off multiple times.


Presentation and Transparency as a Feature

We surface recommendations in two places: a weekly email and the artist dashboard. Right now only a few thousand artists are opted into the weekly email, a number that's grown steadily as more artists discover the feature and turn it on.

Along with the recommendations themselves, we show the reason for each one. "You match because you're near Chicago." "You match because you work in ceramics." This is a feature, not a footnote. There are two reasons we do it.

One, we believe in transparency as a philosophy. People genuinely like seeing behind the curtain. When you let someone understand why you're doing something, they trust it more.

Two, and more practically, it creates a feedback loop. If someone sees "You match because you're near Chicago" and they actually live in Baltimore, they'll tell us. Or they'll go update their settings. Either way, the data gets better. Without the visible reasoning, we'd never find out we were wrong.

The Identical Email Problem

Early on, we had no memory. The algorithm was deterministic: same inputs, same sorted output, same email every week. We discovered that roughly 90% of recipients would have gotten the exact same email on the second send as the first. The top recommended call was being sent to 75 different artists in a single send.

Harrison built a suppression system. We log every recommendation we make. If we've shown you the same call twice and you haven't clicked or applied, we stop showing it. We assume you saw it and passed.

We also restructured the email into two sections: "Your top matches" (new calls, up to four) and "Still on your radar" (calls you've seen before but haven't acted on). The algorithm now has memory.

Avoiding Call Promotion

Some of our competitors take a similar route as us. Emailing artists about shows they should apply to. The biggest differentiator we have: we don't do paid promotions. All of our competitors only do email blasts when they are paid to do so. Galleries may get a quick boost in how many applicants they get, that is for sure. But when we talk to galleries who pay for this, their universally say it's almost never worth it. They either get applicants who are not a good fit, or they pay and get mixed in with other calls.

We are choosing to decline all payment attempts. Artists will see the calls that are the best for them.


Algorithm scoring and presentation pipeline diagram

What We Discovered About Our Artists

While building this, we did a full behavioral segmentation of the artist base. What we found changed how we think about the algorithm's job.

Among artists who have opted into recommendations:

Segment % Behavior
One-and-done 41% 1 entry, 1 gallery, stopped
Never submitted 18% Opted in, never applied
Captive Loyalist 16% Multiple entries, all to 1 gallery
Narrow Explorer 11% 2-5 entries, 2 galleries
Regular 8% 6-15 entries
Active Discoverer 5% 2-5 entries, 3+ galleries
Power 1% 16+ entries

And zooming out to the full platform: of every artist who has ever submitted to anything on EntryThingy, 94.6% have only ever submitted to one gallery. Among the small slice who submitted more than once to that same gallery (our Captive Loyalists), the most prolific went 38 times, all to the same gallery.

These artists were recruited by that gallery (through a postcard, an email, word of mouth) and they never looked anywhere else. They don't think of themselves as call-seekers. The algorithm's job isn't to find them a better medium+location match. It's to introduce them to their second gallery.

That's a harder problem than we initially thought, and it probably requires different messaging, not just better scoring. We saw evidence of this in the first send data. Captive Loyalists had a 71% open rate (they're reading the email) but only a 15% click rate, the lowest of any segment. They're reading it and moving on.

Overall numbers were strong: 76% open rate, 20% click rate. Exceptional for email. But the Captive Loyalist behavior is the signal that tells us we haven't fully solved the problem yet.


The Real Metric Is Submissions, Not Clicks

Opens and clicks are vanity metrics. The actual question is: did the artist apply to a show they found through our recommendation?

We track this with a 30-day attribution window. If someone clicks a recommended call and submits within 30 days, we count that as a conversion. Even 5 or 10 of those in a month is proof the flywheel is working. That's 5 to 10 artists who found a show through us that they wouldn't have found any other way. That's the whole point of this.

We don't have a lot of experimentation infrastructure. Every change is a decision doc, ship it, watch what happens. For a team our size, that's the right call: we don't have enough volume to reach statistical significance quickly on small variants. What we do have is directional signal, and directional signal is enough to keep improving.


What's Next

We have 99 gallery pairs in our data with three or more shared submitters (artists who showed at Gallery X also applied to Gallery Y). That's a latent social graph we haven't fully used yet.

The current algorithm says: "Here's a call near you that accepts painting." Our hypothesis is that the Captive Loyalist segment doesn't need a better filter: they need social proof. The framing that might actually move them is: "Artists who show at your gallery also applied to this." That's a copy change, not an algorithm change. We're going to test it.

There are also things we deliberately didn't build:

What we are adding: more rules based on what artists actually ask for. Call type, gallery reputation, more granular medium matching. The rules engine makes this easy: you don't have to touch anything that's already working.

The bigger data quality push is on the call side. 85.4% of active calls have no medium tag. Until we fix that, medium matching is a feature that only works for 1 in 7 calls. That's the constraint that limits everything else.


Artists Are Winning

Most of our artists are one-gallery artists. If we can move even a fraction of them to two or three galleries, everyone wins. Artists get more chances to show their work. Galleries get more applicants. We make more money: our revenue is transaction-based, so more submissions is more success.

The most meaningful feedback we've gotten has come through my email signature. Every recommendation email goes out signed by me, Myles. Artists reply. They say: "Thank you for sending me this show. I wouldn't have found out about it any other way."

We don't have something perfect. We have something honest, extensible, and grounded in what artists actually care about: shows that are right for where they live and what they make. The vocabulary problem is real and still unsolved. The call coverage gap (85.4% with no medium tag) is the most pressing constraint on the algorithm improving. The Captive Loyalist segment is still mostly passing. The social proof hypothesis is unproven.

But the foundation works. And 164,266 artists can now receive recommendations through their dashboard and email that are, at minimum, better than nothing.

Myles Marino

Partner at Third South Capital, where we cultivate, build, and buy software.

More about me →