Journals / Case study

How OLX catches a stolen listing photo after the thief edits it

In 2020 an OLX Group engineer explained how to spot a listing photo that was lifted from another seller and then edited. Every photo becomes a short vector, new ones are compared with stored ones, and a moderator gets the unsure cases. The post shows the method, not the results.

28 OCT 20269 min readFraud · Trust and safety · Image similarity · Marketplaces Based on: OLX, 2020
Diagram of the decision OLX describes. A new listing photo becomes a vector and is compared with the vectors of stored photos. A distance below the lower threshold marks the listing as fraud, a distance above the upper threshold lets the photo through, and anything in between goes to a moderator, who sees the closest earlier photo.
Diagram: MORARI. Source: OLX

The oldest trick on a classifieds site needs no skill. Find a good listing, save its photos, post them as your own at a lower price, and wait for a deposit. On 1 October 2020 Artemii Frolov of OLX Group's engineering team described how OLX thinks about catching it: "One of the known methods of fraud is stealing pictures of the goods from the original seller." The same photos then sell "the fake goods" or rent out "fake apartments". The post reports no results, but its design is still the right shape for stopping the trick.

The problem: the thief edits the copy

An exact copy is easy to catch. The hard part comes next: "in order to bypass security systems, they not only copy the ad but also make changes both in the text and attached images. Sometimes the text is rewritten completely and the only way to determine the duplicate is an image." A mirrored, cropped or recoloured photo no longer matches byte for byte. An earlier OLX post from January 2020 put it plainly: "cropping a part of the image, rotating the image, or reflecting it does affect the hash", the cheap fingerprint most sites start with, so "other methods, like neural networks, should be used."

Volume is the second problem. "as the number of images increases, it becomes longer and more difficult to compare them directly with each other."

Diagram of one drawn listing photo, a sofa, and four edited copies a thief might post: mirrored, cropped, recoloured, and with new text laid over it. Each copy fails an exact byte match with the original.
The edits that break a simple match. The same edits later become training data. Diagram: MORARI. Source: OLX

How they built it

Turn each photo into a short list of numbers. An embedding is a compact vector that stands for a picture. In the post's words, "we can transform an image of any size to a not very long vector and then compare not the images themselves but their embeddings, which is much faster."

Compare, then sort into three bands. A new photo's vector is compared with the stored ones, and two thresholds split the result, as drawn at the top of this page. Below the lower one, a near-certain copy, "we can immediately mark the listing as a fraud." Above the upper one, a clearly new photo, "we can pass the image on to the site." In between, "moderators come to the rescue". The system therefore "must not only correctly mark the duplicate, but also find the most similar image to it."

Learn the vectors from triplets. OLX trained a Siamese network with triplet loss. Each training example has three photos: the original (the anchor), an edited copy of it (the positive) and a different photo (the negative). Training pushes the copy closer to the original than the different photo, by at least a set margin. It "trains to get embedding so that the distance between similar images is much smaller than the distance between completely different ones." The margin, called alpha, stops the lazy solution of mapping every photo to zero.

Diagram of triplet training in two panels. Before training, the original photo A, its edited copy P and a different photo N sit at similar distances from each other. After training, A and P sit close together and N is pushed beyond a margin.
What triplet training does to the distances. Drawn after the post's own figure. Diagram: MORARI. Source: OLX

Make the training data from the attack itself. The positives come from editing a photo the way a thief would: "having one image, with the help of augmentations it is possible to generate several positive examples and select several negative examples." One image becomes many triplets.

Train on hard cases, but not only those. The post sorts triplets into easy, semi-hard and hard. Hard ones teach the most, so each batch mixes them with random ones: evaluate a few random batches, "Choose a few triplets with the highest loss", and mix them back in. The network starts from pre-trained weights instead of from scratch.

What it delivered

The post does not say. There is no accuracy, no false-alarm rate, no count of frauds caught, and no statement that the model runs in production or in which country. The distances on its sample moderator screen compare three different cars: layout, not result. The only volume figure in the series belongs to the January hash post: "This way we can process up to 10 million images per day, which peaks at 230 images per second." That post also warned that its system "doesn’t necessarily 100% reflect what we use at OLX". Read it as a design, not as proof.

What has changed since

Ready-made models now do much of the training. CLIP (2021) and DINOv2 (2023) give general image vectors without fine-tuning. SSCD, published in February 2022, was trained for this exact job; its paper opens: "Image copy detection is an important task for content moderation." The results paper of the Image Similarity Challenge 2021 found the hardest edits were "severe image crops or hiding into unrelated images" and listed what the winners did, starting with "training on strong augmentations", the same idea as OLX's edited positives, plus a second pairwise check after the first match. Searching millions of vectors is now a library call: FAISS "is MIT-licensed". In October 2025 OLX engineers wrote, about search rather than fraud, that open-source models "make it challenging to justify the development of custom models".

A new kind of fake photo has no original to match. In November 2025 New York's Department of State warned of "a significant rise in artificially generated pictures on real estate listings." A copy detector has nothing to match those with. Provenance points another way: the C2PA 2.3 content-credentials standard of December 2025 defines a "soft binding", a fingerprint or watermark that survives edits.

We found no follow-up from OLX on the triplet model.

Why it matters for your business

In Indonesia the OLX name has changed hands. Astra completed its purchase of the Indonesian OLX business in August 2023, and in May 2025 Toyota Motor Asia bought 40% of its holding company, PT Astra Digital Mobil. Nothing we found says the 2020 model ever ran on Indonesian listings. The trick is local all the same: classifieds for cars, motorbikes and rooms sell on photos, and a good photo is easy to lift.

OJK's Indonesia Anti-Scam Centre reported 668,441 reports and Rp771.2 billion of victims' funds blocked between November 2024 and August 2026. That covers financial scams in general, not listing photos. OJK's advice is that "Semakin cepat laporan disampaikan, maka semakin besar pula jumlah pengembalian dana yang dapat dilakukan." A check at upload acts earlier still, before anyone pays.

The law matters once photos are compared at scale. Indonesia's data protection law, UU 27/2022, gives a face image as an example of biometric data. Its list of high-risk processing that calls for an impact assessment includes large-scale processing, the matching of data sets and new technology, and it lets people object to decisions made purely by automated processing that significantly affect them. Its implementing regulation, PP 33/2026, was set in July 2026 and takes effect on 16 January 2027, according to two write-ups by advisers. A photo-matching service may need that assessment. Whether a listing photo, a number plate or a photo's vector counts as personal data is a question for counsel; we are engineers, not lawyers.

How we would build it today

Diagram of a pipeline: every upload is normalised, a perceptual hash catches near-exact copies, a ready-made embedding model and a vector index find the closest earlier photos from other sellers, three bands sort the result, and the top and middle bands go to a review queue with an appeal, while shadow mode logs decisions before any action is taken.
The 2020 shape, rebuilt from parts that exist today. Diagram: MORARI. Source: OLX
  1. Keep the three bands. Copy, new, unsure. The unsure band is where people earn their keep.
  2. Normalise every upload the same way. One image library, one decode and resize path. The PDQ README warns that the same image can hash differently across libraries.
  3. Hash first. A perceptual hash such as Meta's PDQ catches exact and near-exact copies cheaply. Check its licence first.
  4. Then a ready-made embedding. Start with SSCD, DINOv2 or CLIP, and check the licence of the weights, not only the code: the DINOv2 README carries non-commercial terms for some checkpoints. Train your own triplet model only if these miss on your own test set.
  5. Search with FAISS or pgvector, across sellers only. A dealer re-posting their own showroom photos is not fraud.
  6. Hold, don't delete. A top-band match goes to priority review, with a way for the seller to appeal. The first uploader is not always the owner: a thief who posts first becomes the "original".
  7. Test before trusting. Label pairs from your own listings, add made-up attacks (mirror, hard crop, text overlay, a photo inside another photo), measure each band, and run in shadow mode before the system acts on anything.
  8. Write down purpose and retention for stored photos and vectors, tell sellers their photos are checked, and log who opens the review tool.

For a small marketplace, steps 1 to 3 and one moderator queue are a fair start. The model is for the thieves who edit.