Arrow right icon Arrow up icon Activity icon Analytics icon Phone icon Caret down icon Caret left icon Caret right icon Caret up icon Checkmark Servers cluster icon Cross icon Devices icon Discover symbol icon Find symbol icon Inspire symbol icon Iphone icon Lock icon Open lock icon Lock icon Magnifying glass icon Mac icon No network icon Multi cluster icon Menu icon Minus icon Partners icon Personalization icon Plus icon Question icon Search API icon Server icon Shield icon Triangle-right icon Triangle-left icon Triangle-right icon Vault icon

Algolia media search and discovery

Drive engagement.
Increase loyalty.
Retain users.

Create engaging experiences for your users by providing the freshest and most relevant content, personalized for each user, and delivered in real-time on the device and platform your users choose.

Sign up Or talk to one of our Product specialist

Global media companies choose Algolia to power content discovery experiences

8tracks logo

“Our goal at 8Tracks is to push the barrier on what's possible in terms of music discovery. That wouldn't be possible without Algolia's API.”

Rémi Gabillet
Co-Founder & CTO
Dubsmash logo

“Once we implemented Algolia and saw how much it was outperforming our previous solution just in terms of providing relevant search results, it was a no brainer for us to migrate to Algolia.”

Tim Specht
Co-Founder & CTO
AngelList logo
National Gepographic logo
Discovery logo
Twitch logo
Universal logo
Medium logo
Dubsmash logo
NPR logo
8tracks logo
Global search illustration

Global Search

In today’s connected society, people across the world are consuming content and event coverage in real-time. Users expect that the relevant and freshest content will be available, in an instant, regardless of where they might be in the world at that moment. With Algolia’s globally distributed infrastructure and flexibility to support any language, extending a consistent and best-in-class search experience to every corner of the globe is no longer a challenge.

Learn more
Custom crawler illustration

Activate Your Archives

With Algolia’s Custom Crawler, unlocking your archives for users to discover your catalogue of rich content is made simple. In addition, boosting relevance based on custom engagement variables such as shares, likes, or even metrics from Google Analytics is all possible.

Learn more
Multiple devices illustration

Unified Experience Across Devices

Build consistent search and discovery experiences across all platforms and devices so that users are able to find exactly what they’re looking for whenever, wherever and however they want.

Learn more

Integrating Algolia to your media use case is a breeze

Use our APIs to customize and integrate great search and discovery on all of your media properties.

Backend
Frontend
my_index = Algolia::Index.new('contacts')
my_index.add_object :firstname => "Jimmie",
                    :lastname => "Barninger",
                    :company => "California Paint"

class Contact < ActiveRecord::Base
  include AlgoliaSearch

  algoliasearch do
    attribute :firstname, :lastname, :company
  end
end

myIndex = apiClient.init_index("contacts")
myIndex.add_object({
  "firstname": "Jimmie",
  "lastname": "Barninger",
  "company": "California Paint"
})

from django.contrib.algoliasearch import AlgoliaIndex

class YourModelIndex(AlgoliaIndex):
    fields = ('firstname', 'lastname', 'company')

$myIndex = $apiClient->initIndex("contacts");
$myIndex->addObject([
    "firstname" => "Jimmie",
    "lastname" => "Barninger",
    "company" => "California Paint",
]);

/**
 * @ORM\Entity
 */
class Contact
{
  /**
   * @var string
   *
   * @ORM\Column(name="firstname", type="string")
   * @Group({searchable})
   */
  protected $firstname;

  /**
   * @var string
   *
   * @ORM\Column(name="lastname", type="string")
   * @Group({searchable})
   */
  protected $lastname;

  /**
   * @var string
   *
   * @ORM\Column(name="company", type="string")
   * @Group({searchable})
   */
  protected $company;
}


use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;

class Contact extends Model
{
    use Searchable; // Simply add a trait
}


const myIndex = apiClient.initIndex('contacts');
myIndex
  .addObject({
    firstname: 'Jimmie',
    lastname: 'Barninger',
    company: 'California Paint',
  })
  .then(content => console.log(content))
  .catch(err => console.error(err));

Index<Contact> index = client
  .initIndex("contacts", Contact.class);

index.addObject(
  new Contact()
    .setFirstname("Jimmie")
    .setLastname("Barninger")
    .setCompany("California Paint")
);


import algolia.AlgoliaDsl._
import scala.concurrent.ExecutionContext.Implicits.global

case class Contact(
  firstname: String,
  lastname: String,
  company: String
)

val indexing: Future[Indexing] = client.execute {
  index into "contacts" `object` Contact(
    "Jimmie",
    "Barninger",
    "California Paint"
  )
}


object := algoliasearch.Object{
    "firstname": "Jimmie",
    "lastname":  "Barninger",
    "company":   "California Paint"
}
res, err := index.AddObject(object)

Index myIndex = apiClient.InitIndex("contacts");
var jsonObject = new JObject();
jsonObject.Add("firstname", "Jimmie");
jsonObject.Add("lastname", "Barninger");
jsonObject.Add("company", "California Paint");
myIndex.AddObject(jsonObject);

let myIndex = apiClient.getIndex("contacts")
let n = [
    "firstname": "Jimmie",
    "lastname": "Barninger",
    "company": "California Paint"
]
myIndex.addObject(n)

Index myIndex = apiClient.initIndex("contacts");

JSONObject jsonObject = new JSONObject()
  .put("firstname", "Jimmie")
  .put("lastname", "Barninger")
  .put("company", "California Paint");

myIndex.addObjectAsync(jsonObject, null);

<div id="searchbox"></div>
<div id="hits"></div>

<script>
  const {
    searchBox,
    hits
  } = instantsearch.widgets;

  search.addWidget(
    searchBox({ container: "#searchbox" })
  );
  search.addWidget(
    hits({ container: "#hits" })
  );
  search.start();
</script>

const App = (
  <InstantSearch>
    <SearchBox />
    <Hits />
    <Pagination />
    <RefinementList
      attribute="company"
    />
  </InstantSearch>
);

<RelativeLayout
  xmlns:algolia="http://schemas.android.com/apk/res-auto"
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent">

  <com.algolia.instantsearch.ui.views.SearchBox
    android:id="@+id/search_box"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

  <com.algolia.instantsearch.ui.views.Stats
    android:id="@+id/search_box"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

  <com.algolia.instantsearch.ui.views.Hits
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    algolia:itemLayout="@layout/hits_item"/>
</RelativeLayout>

<ais-index>
  <ais-search-box />
  <ais-results>
    <template scope="{ result }">
      <h2>{{ result.company }}</h2>
      <p>{{ result.firstname }} {{ result.lastname }}</p>
    </template>
  </ais-results>
  <ais-refinement-list attributeName="company" />
  <ais-pagination />
</ais-index>

<ais-instantsearch>
  <ais-search-box></ais-search-box>
  <ais-hits>
    <ng-template let-hits="hits">
      <div *ngFor="let hit of hits">
        <h2>{{ hit.company }}</h2>
        <p>{{ hit.firstname }} {{ hit.lastname }}</p>
      </div>
    </ng-template>
  </ais-hits>
</ais-instantsearch>

import InstantSearch

override func viewDidLoad() {
  super.viewDidLoad()

  let searchBar = SearchBarWidget(frame: ...)
  let statsWidget = StatsLabelWidget(frame: ...)
  self.view.addSubview(searchBar)
  self.view.addSubview(statsWidget)

  // Add all widgets in view to InstantSearch
  InstantSearch.shared.registerAllWidgets(in: self.view)
}