Algolia Saas search and discovery

Secure & Reliable
Search that Scales
with Your Business

Increase user retention with fast and relevant search,
powered by Algolia’s Search API.

iPad mockup

The World's leading SaaS companies trust Algolia's Search APIs

Flexport logo

“Algolia has become so mission critical for navigating our application that users instantly notice whenever we ship a new enhancement to our Algolia implementation.”

Desmond Brand,
Director of Engineering
zendesk logo

“Algolia’s federated search helps us facilitate seamless customer experiences by empowering our employees to easily and quickly find the relevant information and resources they need to do their job every day.”

Brit Atilano
Program Manager, IT Operations
Twitch logo
Salesforce logo
Zendesk logo
Shipstation logo
Sense logo
Vmware logo
Wework logo
Aftership logo
Various logos illustration

Developers First

Save your team time and dev cycles with detailed documentation that removes the complexity of integrating search into your products. Algolia provides 16 API clients, 9 client libraries, and 5 supported plugins to make it easy to build a consistent search and discovery experience across multiple platforms and devices.

Documentation
Server illustration

Reliability

With Algolia, you don’t have to worry about search going down. An available 99.999% SLA ensures that you can rely on our APIs, so your team can focus on building great products for your users, rather than on maintaining core services.

Algolia status
Multilanguage illustration

Scalable

Whether you’re building an MVP or adding search for millions of users, Algolia provides you with the search stack that scales to your use case. With 55+ data centers on 6 continents, plus offline search functionality, Algolia gives your users a lightning-fast search experience anywhere in the world. In 2017, Algolia returned 99% of search queries in under 17ms.

Infrastructure

Integrating Algolia to any app is a breeze

Use our APIs to customize and integrate great search and discovery in your app or website.

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;
}


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",
}
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 />
    <Results />
    <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.name }}</h2>
      <p>{{ result.description }}</p>
    </template>
  </ais-results>
  <ais-refinement-list attributeName="company" />
  <ais-pagination />
</ais-index>

@Component({
  selector: 'search-ui',
  template: `
    <input type="search" (input)="search()">
    <div *ngFor="let result of results">{{result.title.highlighted}}</div>
    `
})
export algolia(App);

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)
}