Skip to main content

Personalized recommendations

Generic “customers also bought” recommendations don’t work well for fragrance — two popular perfumes can smell completely different. 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.

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: "1234,5678"
    lang: "EN"
    page: "0,10"
  }) {
    id
    name
    brand {
      name
    }
    family {
      name
      color
    }
    image {
      small
      medium
    }
  }
}

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: "3348901250511,3346470135772"
    lang: "EN"
    page: "0,10"
  }) {
    id
    name
    brand {
      name
    }
    ean
  }
}

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.
query UserRecommendations {
  recommendedPerfumes(
    search: {
      perfumes: "1234"
      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: "1234"
    lang: "EN"
    page: "0,10"
    customRecommendation: {
      enabled: true
      excludedBrands: [42, 87]
      includedBrands: [10, 25, 33]
      excludedPerfumes: [5678]
    }
  }) {
    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: "1234"
    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: "42,87,103"
    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: ["1234", "5678", "9012"]
    lang: "EN"
  ) {
    id
    name
    bio
    house
    image1 {
      small
      medium
    }
  }
}
This enables “meet your perfumer” modules that connect users to the creators behind their favorite fragrances.