Importing Data to Joind.In

Update! This post is now outdated – the import functionality on has been replaced with a CSV import.

As a conference organiser I work extensively with the site, which allows attendees to comment on sessions at a conference. Recently the site has also started supporting sessions with both times and tracks, making it indispensable as a way of keeping track of all the sessions during an event. The only downside is entering all the data into it!! does have some import functionality, which I recently rebuilt to reflect the timings and track changes, however this only accepts XML at present, so there is still some preparation work to get your data ready to import.

I know I’m not the only conference organiser who will have this problem so here’s my step-by-step guide to getting talk information into, easily and quickly. For up-to-date documentation on the import process and the official data format description, see

Set up Event and Tracks

Step one is to submit your event to When it is approved by the administrators you will receive notification and it will appear publicly on the site ( also supports private events, see the website for more information).

Once it is approved, make sure the timezone is set correctly by editing your event. For me this is Europe/Amsterdam, since I’m setting up data for the Dutch PHP Conference.

If you are going to include information about the different tracks, either rooms or subject tracks, you can set these up now (if not, then skip to the next section). When viewing an event, if you are logged in and have admin rights on that event, you will see an “Event Admin” box. The “Event Tracks” screen will let you add, edit and remove the tracks for your event.

Prepare Your Data

I had the talks in a spreadsheet and I found this was a good starting point. Each row is imported independently so each one needs to contain all the information about the session. My spreadsheet had the following columns:

  • Date
  • Time
  • Track (string name matching the track you set up earlier)
  • Type (either “Social Event”, “Talk”, “Keynote”, or “Workshop”)
  • Speaker
  • Session
  • Abstract

There was a lot of duplication here, for example lots of copied and pasted dates, but for each row to be evaluated separately, we need it to look like this. At this point I exported the spreadsheet to .csv format but currently only supports XML so I still had to built the format it could understand.

Generate the XML

I wrote a little script that processed my CSV file and spat out the XML that was expecting. There are a few pitfalls with this step:

  • I’m British, so my date formats assume dd/mm/yyyy
  • The import doesn’t support languages (see
  • The script contains a function copy/pasted out of the codebase to handle the timezones calculation (because I already had it working once, I just stole it)
  • The first row in the spreadsheet is assumed to contain titles and is ignored
  • The script has a hardcoded timezone in it for Europe/Amsterdam

By now you can guess this use-once script is a bit of a mess but in case it is useful I am uploading it here (if nothing else, I guess I might use it again!). I considered adding support for CSV files into itself (I’m a contributor) but I was short on time – if this would be useful to you or if you have any other comments on the process then add them here and I will do my best to reply!


  • Conversion script for CSV files to XML format (use at your own peril!) csvToXml.txt – change the file extension to .php
  • My original spreadsheet, in case an example is helpful talks.csv – this is the data for DPC 2010

One thought on “Importing Data to Joind.In

  1. In case anyone thinks I’ve gone crazy after already writing about its import functionality this week, I really haven’t. Its just that some months of pulling a few things together have finally bourne fruit and so I can actually write about them n

Leave a Reply

Please use [code] and [/code] around any source code you wish to share.

This site uses Akismet to reduce spam. Learn how your comment data is processed.