Skip to main content

Personalized recommendations

Generic “customers also bought” recommendations don’t work for fragrance — two popular perfumes can smell completely different. A customer who loves a woody ambery will not appreciate a fresh citrus, regardless of how many other people bought it. WikiParfum generates recommendations based on olfactive affinity: ingredient composition, family relationships, and structural similarity. The result is suggestions that genuinely smell like something the user would enjoy — driving higher conversion and trust in the recommendation.

The business impact

  • Higher conversion — trust in the recommendation drives purchase
  • Increased average order value — users explore and add complementary products
  • Stronger loyalty — personalized experiences generate return visits (most users return within 30 days)
  • Better cross-sell — suggest products based on what customers actually like, not just what’s popular

What you can build

  • “If you like this” carousels on product pages
  • Cross-sell and upsell modules based on olfactive proximity
  • Scan-to-recommend experiences using EAN barcodes
  • Personalized homepages based on browsing history
  • Catalog-restricted recommendations scoped to a retailer’s assortment

Recommend similar perfumes

Given one or more perfumes the user likes, get similar fragrances ranked by olfactive proximity.
query RecommendedPerfumes {
  recommendedPerfumes(search: {
    perfumes: "424,1"
    lang: "EN"
    page: "0,10"
  }) {
    id
    name
    recoValue
    brand {
      name
    }
    family {
      name
      color
    }
    image {
      urls {
        low
        mid
      }
    }
  }
}

Match score

Each recommendation includes a recoValue field: a similarity score between 0 and 1 representing how closely the recommended perfume matches the user’s profile. Results are sorted by this score in descending order, so the first result is always the best match. The score is computed from multiple olfactive dimensions including ingredient overlap, fragrance family proximity, and intensity similarity. You can convert it to a percentage for display purposes (e.g., 0.87 = 87% match).
Value rangeInterpretation
0.8 - 1.0Very strong match
0.6 - 0.8Good match
0.3 - 0.6Moderate match

Recommend by EAN

Use EAN barcodes as input — ideal for scan-based or POS-integrated experiences where you have barcodes but not WikiParfum IDs.
query RecommendByEAN {
  recommendedPerfumes(search: {
    perfumeEans: "8411061994351,0085715166067"
    lang: "EN"
    page: "0,10"
  }) {
    id
    name
    brand {
      name
    }
  }
}

User-scoped recommendations

Pass a userId to incorporate the user’s interaction history into the ranking. Over time, recommendations become increasingly aligned with each user’s evolving taste profile — without requiring explicit questionnaires or profile setup.
query UserRecommendations {
  recommendedPerfumes(
    search: {
      perfumes: "424"
      lang: "EN"
      page: "0,10"
    }
    userId: "user-abc-123"
  ) {
    id
    name
    brand {
      name
    }
  }
}

Scoping to a catalog

Custom recommendation rules

Use customRecommendation to control which brands or perfumes appear in results. This is essential for retailers who need recommendations limited to their own assortment, or brands that want to exclude competitors.
query CustomRecommendations {
  recommendedPerfumes(search: {
    perfumes: "424"
    lang: "EN"
    page: "0,10"
    customRecommendation: {
      enabled: true
      excludedBrands: [42, 87]
      includedBrands: [10, 25, 33]
      excludedPerfumes: [1]
    }
  }) {
    id
    name
    brand {
      name
    }
  }
}
FieldDescription
excludedBrandsBrand IDs to exclude from results
includedBrandsOnly return perfumes from these brands
excludedPerfumesSpecific perfume IDs to exclude
includedPerfumesSpecific perfume IDs to include

Filtering results

Recommendations can be further narrowed using standard filters — for example, limiting to a specific gender or market segment. See Filtering & Pagination for all available filter options.
query FilteredRecommendations {
  recommendedPerfumes(search: {
    perfumes: "424"
    lang: "EN"
    page: "0,10"
    filters: {
      gender: "F"
      classification: "prestige"
    }
  }) {
    id
    name
    gender
  }
}

Ingredient recommendations

Given a set of ingredients the user enjoys, surface other ingredients they might like. This powers ingredient-based exploration flows where users progressively build an olfactive profile.
query RecommendedIngredients {
  recommendIngredients(search: {
    ingredients: "710,42"
    lang: "EN"
    page: "0,10"
  }) {
    ingredients {
      id
      name
      family {
        name
      }
    }
  }
}

Perfumer recommendations

Surface the perfumer whose creative style best matches the user’s taste — based on the perfumes they enjoy.
query RecommendedPerfumist {
  recommendedPerfumist(
    perfumes: ["100", "200", "300"]
    lang: "EN"
  ) {
    id
    name
    bio
    house
    image1 {
      urls {
        low
        mid
      }
    }
  }
}
This enables “meet your perfumer” modules that connect users to the creators behind their favorite fragrances.