bookends tools

Created By: Ian Max Andolina, 70 Stars, Last Updated: 13/07/21 11:37:36

Love this? Please consider supporting its creator by starring or sponsoring this project on GitHub!

From the project's README:

Bookends Tools

Bookends is an excellent bibliographic/research manager for macOS. This Alfred workflow curates around 11 tools together in one interface to integrate between Bookends and other apps. You can use Alfred keywords (be…) and/or your preferred key binding to trigger them (edit the Hotkey trigger). The workflow is designed for Alfred 3 and 4, and should keep itself up-to-date using OneUpdater.

Download it here…

Workflow screenshot

Note: the tools denoted by πŸ“„ utilise Applescript System Events to trigger keyboard bindings with delays; the delays work fine for me but may need to be adjusted for you. If the tools seems to not work try to manually type ⌘V and enter.

key: πŸ“„: select some text in another app then trigger tool β€” πŸ—„: select reference(s) within Bookends then trigger tool β€” ⌨: trigger tool and enter some text Β 

  1. beidsearch πŸ“„ β€” Find a selected uniqueID in Bookends. For example, if you have a temporary citation like {Koffka, 1922, #6475} in your word-processor, double-click select the Bookends ID 6475, then trigger this workflow and it will find the reference in Bookends for you.
  2. bebrowser πŸ“„ β€” Search selected text in Bookends browser. For the Pubmed interface you should select this manually in the bookends browser before triggering this tool. If the automatic paste into the search field fails, press ⌘V and ENTER to trigger the search.
  3. berefsearch πŸ“„ β€” Take selected text like "(Doe et al., 2005)" citation, clean it up to become "Doe 2005" and send it to Bookend's quick search. This is great because you can take a formatted ref in a text document and search for the first author/year, then quickly paste back (⌘Y for Scrivener) the Bookends style temporary citation in its place!
  4. bequickadd πŸ“„ β€” Take a selected DOI / PMID / ISBN / JSTOR in any application and send it to Bookend's Quick Add (added in Bookends 13.0.3+) to quickly add this reference to your database.
  5. betobibtex ⌨ β€” You enter the name of a Bookends static/smart group name and this will create a BibTeX bibliography file for those particular groups. Very useful for Pandoc and/or LaTeX workflows. You can optionally generate JSON. You can configure the export path in the workflow variables (default Desktop/). betobibtex
  6. betoopml πŸ—„ β€” Select multiple references within Bookends, then run this to create an OPML file which you can import into Scrivener or other OPML-aware tool. This will contain the abstract and notes which is very useful for research. It contains links back to the Bookends reference. You can configure the export path in the workflow variables (default Desktop/).
  7. bescopus πŸ—„ β€” Select a reference with a DOI in Bookends, then trigger this to search Scopus with that DOI. It will return an inline results list for the Scopus entry AND the Cited-by page if available. Select an entry to open that page. Environment variables: appendScopusNotes [true/false] β€” copy the URLs into the Notes field | scopusKey [value] if you have registered for your own key enter it here | scopusBaseURL [url] β€” If you got through a proxy, enter the URL base to replace bescopus
  8. becite ⌨ β€” Activate becite in any application to search your bookends database with one or more author/editor names and an optional year (for example: friston hobson 2014), and get a floating inline results list. You can then select a result and paste the selected ref as a temporary citation (⌘ pastes Pandoc style, βŒ₯ pastes MMD style, βŒƒ pastes formatted ref, ⇧ opens ref in Bookends, [fn] opens attachment). For becite, betitle. and beall there is also a workflow environment variable (citeUsesRTF & commentText) to copy the Pandoc/MMD temporary citation using RTF; this puts the link back to bookends into an RTF comment (and/or annotation in Scrivener). becite
  9. betitle ⌨ β€” Enter one or more words contained in the title or keywords and an optional year, and get a floating inline results list. You can then paste this as a temporary citation (⌘ pastes Pandoc style, βŒ₯ pastes MMD style, βŒƒ pastes formatted ref, ⇧ opens ref in Bookends, [fn] opens attachment). betitle
  10. beall ⌨ β€” You enter one or more words contained in any field and an optional year, and get an inline results list. You can then paste this as a temporary citation (⌘ pastes Pandoc style, βŒ₯ pastes MMD style, βŒƒ pastes formatted ref, ⇧ opens ref in Bookends, [fn] opens attachment).
  11. bebib ⌨ β€” You enter one or more author/editor names and an optional year, and get an inline results list. You can then paste the selected ref as a formatted reference (see workflow variable citationStyle; ⌘ pastes Pandoc style, βŒ₯ pastes MMD style).
  12. beconvert πŸ“„ β€” This has a very specific use, say you have an author-date formatted intext citation (Barlow et al., 1963), select it and run this to get a temporary citation using the most likely BibTeX key [barlow1963]. It allows me to take an author-date formatted manuscript from someone else and as long as I have regular BibTeX keys [authoryear], manually converts the intext citations to a form Bookends or Pandoc can then scan, saving some time.

Workflow variables


There are several workflow variables which let you modify the functionality of the tools:

  • tempCitationStyle : for becite / betitle / beall the default temporary citation style is Bookends (with key modifiers allowing Pandoc and MMD formats). However if you will never use the Bookends format, you can set tempCitationStyle to Pandoc / MMD / LaTeX and the default temp citation will be set accordingly.
  • attachmentsFolder : relative or absolute path to where your Bookends attachments are stored. This is used so that you can Quicklook results with PDF attachments from becite / betitle / beall tools (press [shift] or ⌘Y)
  • BibTeXtoJSON (default = FALSE): allows you to convert the BIB file to a JSON file, which at least for Pandoc-citeproc is much faster (~3X) to then process for the bibliography.
  • citeUsesRTF (default = FALSE) & commentText: for the becite and betitle tools for Pandoc/MMD temporary citations, if you enable this then the temp citation is copied as RTF with a comment-enclosed link back to Bookends. In Scrivener if you enable Preferencesβ–ΈSharingβ–ΈImport comments as inline annotations, then the comment becomes an inline annotation. commentText is the text that is linked back to Bookends (default is @). For bebib tool it will toggle whether the formatted ref is plain or RTF.
  • customExportFormat (default = EMPTY) : for betobibtex the default is to use the standard BibTeX.fmt export format. This includes abstract and addresses which are not always needed for bibliography generation. You can therefore specify a custom format, for example like this BibTeX-Minimal format, which omits these fields and results in a faster BibTeX generation and smaller resultant file.
  • protectBibTitles (default = FALSE): makes titles in the BIB file {{ wrapped }} so the case is not changed in subsequent processing.
  • citationStyle (default = APA 6th Edition): is the Bookends bibliographic style used by bebib when outputting the formatted reference.
  • exportPath (default = Desktop): used by betoopml and betobibtex
  • appendScopusNotes (default = FALSE): allows you to toggle the behaviour whereby the Scopus URLs are appended back into the Bookends reference note stream.
  • scopusKey: your personal Scopus API key (see below).
  • scopusBaseURL: If you use a proxy that changes the base URL, enter it here to replace the default

Scopus Info

For the Scopus search tool, ideally you should register for your own Scopus API key (without it it will use the demo key which may or may not work) and enter it in the workflow variables. The Scopus URLs also benefit from an institutional subscription, otherwise you will see a Scopus preview (which still contains useful information). If your institution offers a proxy, then you can enter the scopusBaseURL variable to use that.


Several of these very useful tools have been modified from the following sources:


Thanks to Dave Glogowski (dave83); Bookends forum thread


Thanks and MIT copyright to Naupaka Zimmerman; Bookends forum thread | Original Gist

becite & bebib

Thanks to kseggleton for the original applescript version; Bookends forum thread


Thanks to Vitor for his excellent update system for Alfred workflows: OneUpdater