How can I deploy bookmarks to safari with Casper?

New Contributor

I am trying to push out favorites/bookmarks to Safari with Casper, instead of me going to each individual laptop and adding a link to the bookmark section for a cart of 30 laptops everytime they want a new site added.



I do not have an answer, but long before we used Casper, I gave up on such a task.

Instead, I suggest that people publish all the links somewhere on their organization's website (or Schoology, etc). It makes managing bookmarks much easier.

Honored Contributor III
Honored Contributor III


Like @dmohs, I tried & gave up adding to the standard bookmarks.

Instead, on the advise on someone on MacE, I created a Safari toolbar & we deploy that.

Honored Contributor

Well, a rinky-dink "solution" would be to add them to the Self Service app. Unless your site list is really long, it would work. You could make them launch the browser instead of using Self Service and it would at least work.

Valued Contributor

I was just looking at this today.for better or worse,were going with a folder in the dock with the links and stacks set to list. you could always create a policy to add new link at login or boot. again just an idea i am playing with, may also have puppet update the folder, we'll see just my 2 cents


Contributor II

Add another one to the list of "tried that, won't go back." We just have buildings/departments have a web page with all of their links and make that page be the default. Then they've got them all in a fairly unobtrusive way.

Not applicable

The last time I turned up Comcast service, part of their activation process ran a script (python iirc) that added bookmarks to my browsers. If I kept a copy of that script, I'll post it - maybe someone with more python-fu can get something useful out of it..


my bash script is from about a year ago. it was challenging because of all the odd .plist manipulations required. python is far better at working with plists than bash. edit as you like. our version logs itself, timestamps itself for easy viewing in console later. additionally, it cycles through EACH user account so we're sure to hit everyone on that mac. lastly, the script adds a bookmark to the FIRST location on the bookmark bar: on the far left. Haven't used in a while so YMMV:


# script to add a bookmark to the FRONT LEFT of the safari bookmark bar
# for all > 500 user accounts.
# to create your own links, just change the variables:
# LinkTitle = the name of the link you'd like to appear in your link bar
# LinkURL = the actual link to which you'll surf
# Bookmakrs = the Safari bookmarks file(s) to which you'll be adding the link
# LOG = whatever your sdout file is

# many thanks to both Chris Norris (cnorris@getty.edy) & Ryan Manly ( for their invaluable input.

#   Variables

# --- assignments ---

# --- executables ---

# --- directories ---

# --- computationals ---
date=`date "+%A %m/%d/%Y %H:%M"`
over500=`dscl . list /Users UniqueID | awk '$2 > 500 { print $1 }'`

# ---------------------------------------------------------------------------
#   Cycle through all users, backs up safari bookmarks & adds new link
# ---------------------------------------------------------------------------
for i in $over500
    cd /Users/$i/Library/Safari
    zip Bookmarks.plist
    echo "backup of bookmarks SUCCESSFUL for the $i account." >> $LOG
    $Plist Bookmarks.plist -c "Add :Children:1:Children:0 dict" >> $LOG
    $Plist Bookmarks.plist -c "Add :Children:1:Children:0:URIDictionary dict" >> $LOG
    $Plist Bookmarks.plist -c "Add :Children:1:Children:0:URIDictionary:title string ${LinkTitle}" >> $LOG
    $Plist Bookmarks.plist -c "Add :Children:1:Children:0:URLString string ${LinkURL}" >> $LOG
    $Plist Bookmarks.plist -c "Add :Children:1:Children:0:WebBookmarkType string WebBookmarkTypeLeaf" >> $LOG

exit 0

Honored Contributor III
Honored Contributor III

Valued Contributor III

I figured out how to add and populate a folder as well. Items are added to the folder in reverse order.


over500=`dscl . list /Users UniqueID | awk '$2 > 500 { print $1 }'`

addBookmark() {
    /usr/libexec/PlistBuddy /Users/$userName/Library/Safari/Bookmarks.plist -c "Add :Children:1:Children:0:Children:0 dict"
    /usr/libexec/PlistBuddy /Users/$userName/Library/Safari/Bookmarks.plist -c "Add :Children:1:Children:0:Children:0:URIDictionary dict"
    /usr/libexec/PlistBuddy /Users/$userName/Library/Safari/Bookmarks.plist -c "Add :Children:1:Children:0:Children:0:URIDictionary:title string ${LinkTitle}"
    /usr/libexec/PlistBuddy /Users/$userName/Library/Safari/Bookmarks.plist -c "Add :Children:1:Children:0:Children:0:URLString string ${LinkURL}"
    /usr/libexec/PlistBuddy /Users/$userName/Library/Safari/Bookmarks.plist -c "Add :Children:1:Children:0:Children:0:WebBookmarkType string WebBookmarkTypeLeaf"

createFolder() {
    /usr/libexec/PlistBuddy /Users/$userName/Library/Safari/Bookmarks.plist -c "Add :Children:1:Children:0 dict"
    /usr/libexec/PlistBuddy /Users/$userName/Library/Safari/Bookmarks.plist -c "Add :Children:1:Children:0:Children array"
    /usr/libexec/PlistBuddy /Users/$userName/Library/Safari/Bookmarks.plist -c "Add :Children:1:Children:0:WebBookmarkType string WebBookmarkTypeList"
    /usr/libexec/PlistBuddy /Users/$userName/Library/Safari/Bookmarks.plist -c "Add :Children:1:Children:0:Title string ${folderName}"

# Run for each user
for i in $over500; do
    echo "Processing user $i"
    if [ ! "$(grep "<string>CompanyLinks</string>" /Users/$i/Library/Safari/Bookmarks.plist)" ]; then
        zip /Users/$i/Library/Safari/ /Users/$i/Library/Safari/Bookmarks.plist
        echo "backup of bookmarks SUCCESSFUL for the $i account."
        createFolder "CompanyLinks" $i
        addBookmark "Link 2 Title" "https://link2" $i
        addBookmark "Link 1 Title" "https://link1" $i
        echo "User $i appears to already have the CompanyLinks bookmark folder, skipping"